[英]C++ unwanted abort causes?
我的C ++代码中有一个非常奇怪的错误。
我必须告诉你这个故事以了解整体。 我正在通过boost_thread库使用线程。 main方法进行一些初始化,启动3-4个线程,然后永远等待:
while(true) sleep(1);
所有线程的主要功能都有一些catch和catch all处理程序的尝试:
void do_work() {
try {
..
}
catch (int ei) {
}
catch (...) {
log("General error");
}
}
线程执行各种任务,例如
有时,通常不会,但是很烦人的是,程序会终止。
一切都应该正确释放并在需要时删除,因此这不是问题。 我生成了一个核心转储,以便有机会调试问题。
有趣的部分现在出现在这里:GDB的回溯看起来像这样:
(gdb) bt
#0 0x40281ae8 in raise () from /lib/libc.so.6
#1 0x402830ec in abort () from /lib/libc.so.6
#2 0x402830ec in abort () from /lib/libc.so.6
#3 0x402830ec in abort () from /lib/libc.so.6
#4 0x402830ec in abort () from /lib/libc.so.6
#5 0x402830ec in abort () from /lib/libc.so.6
#6 0x402830ec in abort () from /lib/libc.so.6
#7 0x402830ec in abort () from /lib/libc.so.6
#8 0x402830ec in abort () from /lib/libc.so.6
#9 0x402830ec in abort () from /lib/libc.so.6
无休止的中止呼叫,我不知道是什么原因造成的。 线程看起来像这样:
(gdb) info threads
4 Thread 490 0x402e7bf4 in nanosleep () from /lib/libc.so.6
3 Thread 489 0x4031b384 in accept () from /lib/libc.so.6
2 Thread 501 0x402e7bf4 in nanosleep () from /lib/libc.so.6
* 1 Thread 486 0x40281ae8 in raise () from /lib/libc.so.6
这也很有趣,因为线程1是无休止睡眠循环的主要功能。
我的问题是: 如何找出堕胎的原因(如果我没有记错的话,因为我不能忽略它)?
在论坛,IRC频道上进行搜索,并在Google上搜索相关信息-但仍然没有。 我在这周前陷入困境,因此非常感谢您提供任何信息!
非常感谢你!
SIGABRT通常在发生严重错误的情况下发送。 由于堆栈很可能被浪费,因此很难跟踪它们。
从回溯来看,您似乎正在运行一个已剥离(并且可能已优化)的可执行文件。 您是否尝试过使用-g
编译和链接,以便在获得核心转储时获得更多的见解?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.