多线程程序出错如何无法确定出错位置

chen1phy 2002-11-28 05:43:40
我的一个多线程程序,有三个线程在运行,这三个线程在大部分时间里面都在poll(),等待网络上有数据到来,然后做处理。
可是在每次core dump以后,用gdb跟踪,都发现定位在poll()这个函数中。
一种解释是,当某个线程在做某些处理的过程中,出错,导致core dump,该线程先退出,而最后一个退出的线程很可能正在运行poll(),所以最后只能定位到poll()中,而不是真正发生错误的地方。

不知道有什么好的解决办法?
...全文
26 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bnwxf 2002-11-28
  • 打赏
  • 举报
回复
一个不可能的原因:
你没有截获signal。所以当信号到达时,程序就core dump了;)
如果你用的是linux,它的多县城特别容易被信号打断。
gaoxianfeng 2002-11-28
  • 打赏
  • 举报
回复
多打印点信息吧
cuiwader 2002-11-28
  • 打赏
  • 举报
回复
应该不是gdb跟踪的问题,应该就是poll函数引起core dump的,看一看你的poll函数的用法是否正确,另外你需要增加一些宏定义,使得连接的库函数是线程安全的。可以在编译命令中怎么-D_REENTRANT和-D_PTHREAD试一试。

23,121

社区成员

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

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