You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Cortex-A9开发板使用arm-none-eabi-g++9.2.1启用C++异常后,捕获异常时仍触发terminate的问题求助

在Cortex-A9开发板使用arm-none-eabi-g9.2.1启用C异常后,捕获异常时仍触发terminate的问题求助

大家好,我最近在Cortex-A9开发板上用arm-none-eabi-g9.2.1编译带C异常的代码,遇到了个头疼的问题:异常明明能被成功捕获,但terminate()还是会被调用,导致程序后续运行异常,想请教下有没有朋友遇到过类似情况,或者能给我点排查方向?

为了启用C++异常,我已经按照查到的资料做了以下配置:

  • 在RTOS启动阶段调用了__libc_init_array();
  • 修改了链接脚本,添加了必要的段配置:
    .init_array :
    {
        // __libc_init_array会用到的相关符号定义
    }
    
    .ARM.exidx : {
        __exidx_start = .;
        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
        __exidx_end = .;
    }
    

完成这些配置后,我在RTOS的一个任务(不是C++标准库的线程)里做了异常测试:

首先定义了自定义异常类:

// .cpp文件
class MyE : public std::exception
{
    // 类的具体实现细节
};

然后在函数中使用这个异常:

// .cpp文件
void myfunc(int value) {
    try {
        throw MyE();
    } catch(MyE &e) {
        printf("catch an exception\n");    // 注:我已经实现了_write_r这类系统调用桩函数,printf能正常输出
    }

    printf("hello world outsize\n");
}

实际运行时,catch块里的打印确实能正常输出,但同时terminate()也被触发了,这就让我很困惑——按道理捕获到异常后不应该再进入terminate流程才对。有没有大佬能帮我分析下可能的原因?

备注:内容来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:34:30