追踪程序中止的工具

Tools for tracing a program abortion

本文关键字:工具 追踪程序      更新时间:2023-10-16

我在Ubuntu机器上用C++编写了一个程序,它包含几个线程,每个线程都负责大量的函数和子函数。

程序运行,但每隔大约30分钟代码就会停止运行,我正试图理解原因。到目前为止,我试图:

  1. 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>中止程序

  1. 使用gdb:I放入

    (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