当前位置: 技术问答>linux和unix
linux下动态库的异常无法catch
来源: 互联网 发布时间:2016-09-29
本文导语: linux系统,采用c/c++混合编程,用gcc -ldl -lstdc++编译,用try{}catch(...){}无法捕获异常。 有两个情况: (1):系统函数的异常直接退出 char buf[] = {"99999999"}; try {int len = atoi(buf);} catch(...) {printf("len errorn");return -1} 编译...
linux系统,采用c/c++混合编程,用gcc -ldl -lstdc++编译,用try{}catch(...){}无法捕获异常。
有两个情况:
(1):系统函数的异常直接退出
char buf[] = {"99999999"};
try
{int len = atoi(buf);}
catch(...)
{printf("len errorn");return -1}
编译没问题,运行时打印了一个系统错误,直接退出了进程,没有进到catch里,没有printf("len errorn");
????为什么????
(2):调用动态库函数,因为是动态库里函数出现异常了,进程直接退出,也无法捕获。
int res;
try
{res = TilGetConfigID(ptr, size);if (res == -1) return -1;}
catch(...)
{printf("invoke library errorn");return -1;}
该怎么捕获呢?
应该是哪个信号导致的。难道要我捕获所有的信号吗?
有两个情况:
(1):系统函数的异常直接退出
char buf[] = {"99999999"};
try
{int len = atoi(buf);}
catch(...)
{printf("len errorn");return -1}
编译没问题,运行时打印了一个系统错误,直接退出了进程,没有进到catch里,没有printf("len errorn");
????为什么????
(2):调用动态库函数,因为是动态库里函数出现异常了,进程直接退出,也无法捕获。
int res;
try
{res = TilGetConfigID(ptr, size);if (res == -1) return -1;}
catch(...)
{printf("invoke library errorn");return -1;}
该怎么捕获呢?
应该是哪个信号导致的。难道要我捕获所有的信号吗?
|
看看有没有core文件..
再试试全部采用g++编译的情况..
再试试全部采用g++编译的情况..