我的 C++ 代码中有一个非常奇怪的错误。
我必须告诉你这个故事才能理解整个故事。我正在通过 boost_thread 库使用线程。main 方法进行一些初始化,启动 3-4 个线程,然后永远等待:
while(true) sleep(1);
所有线程的主要功能都有一些 catch 和 catch all 处理程序的尝试:
void do_work() {
try {
..
}
catch (int ei) {
}
catch (...) {
log("General error");
}
}
线程执行各种任务,例如
- 使用 execv 函数执行脚本,
- 使用 sqlite 库写入数据库,
- 通过 openssl 库与世界交流。
有时,不是通常,但经常会烦人程序被终止。
一切都在应该的时候被正确地释放和删除,所以这不是问题。我让它生成一个核心转储,以便有机会调试问题。
有趣的部分现在来了: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 频道和谷歌上搜索它 - 但仍然没有。几周前我被困住了,所以非常感谢任何信息!
非常感谢!