跟踪程序堕胎的工具
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟踪程序堕胎的工具相关的知识,希望对你有一定的参考价值。
我在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
以上是关于跟踪程序堕胎的工具的主要内容,如果未能解决你的问题,请参考以下文章