我在Ubuntu机器上有一个C ++程序,它包含几个线程,每个线程负责大量的函数和子函数。
该程序运行,但每隔约30分钟代码停止运行,我试图理解为什么。到目前为止,我试图:
try-catch
放在代码上:main和每个线程 - 程序停止运行而不捕获:
try
{
//code
}
catch(const std::exception & e)
{
}
catch(...)
{
}
2.使用strace
:当代码停止运行时,输出文件的最后几行是:
nanosleep({0, 10000}, NULL) = 0
nanosleep({0, 10000}, NULL) = 0
nanosleep({0, 10000}, NULL) = 0
nanosleep({0, 10000}, NULL) = 0
nanosleep({0, 10000}, NULL) = 0
nanosleep({0, 10000}, NULL) = 0
nanosleep({0, 10000}, NULL) = 0
nanosleep({0, 10000}, NULL) = 0
nanosleep({0, 10000}, <ptrace(SYSCALL):No such process>
+++ killed by SIGABRT +++
我无法理解killed by SIGABRT
消息或<ptrace(SYSCALL):No such process>
导致程序堕胎的原因
gdb
:我说
(gdb) catch throw
(gdb) run
代码开始运行但似乎gdb停止运行:
Starting program: *****
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff2d6a700 (LWP 13305)]
[Thread 0x7ffff2d6a700 (LWP 13305) exited]
[Inferior 1 (process 13304) exited normally]
(gdb)
如果我在这里做错了,我会很高兴知道出了什么问题,如果没有,是否有其他方法\工具来追踪问题?
我开始认为可能是导致此问题的程序外部的东西(?)。
谢谢。
在所有退出的东西上放置断点
b exit
b _exit
b __exit
b exit_group
如果你不在其他地方使用它们,也许还可以杀死变种
b kill