在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
相关产品推荐
相关产品推荐

