linux下动态库的异常无法catch

liaozhicai 2010-09-19 09:02:01
linux系统,采用c/c++混合编程,用gcc -ldl -lstdc++编译,用try{}catch(...){}无法捕获异常。

有两个情况:
(1):系统函数的异常直接退出
char buf[] = {"99999999"};
try
{int len = atoi(buf);}
catch(...)
{printf("len error\n");return -1}
编译没问题,运行时打印了一个系统错误,直接退出了进程,没有进到catch里,没有printf("len error\n");

????为什么????
(2):调用动态库函数,因为是动态库里函数出现异常了,进程直接退出,也无法捕获。
int res;
try
{res = TilGetConfigID(ptr, size);if (res == -1) return -1;}
catch(...)
{printf("invoke library error\n");return -1;}

该怎么捕获呢?

应该是哪个信号导致的。难道要我捕获所有的信号吗?
...全文
150 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2010-09-20
  • 打赏
  • 举报
回复
看看有没有core文件..
再试试全部采用g++编译的情况..
liaozhicai 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justkk 的回复:]
看看有没有core文件..
再试试全部采用g++编译的情况..
[/Quote]

最开始的框架不是我定的。
我现在在sigsegv信号处理函数里用longjmp了。
而且在调用动态库的时候,我把传入的参数,增加了N多检查,以免不测。
liaozhicai 2010-09-19
  • 打赏
  • 举报
回复
又比如,段错误,sigsegv信号。
char* ptr=NULL;
try(strcpy(ptr, "aaa");}
catch(...){printf("errorn\n");return -1;}
进程直接就打印segmenttation fault,然后退出。
如果调用别人的动态库,在动态库里出错了,又没法修改,但不希望进程退出啊。
难道只能捕获信号?但是不知道会是什么信号呢。难道要把所有的信号都捕获吗?

??????

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧