跟踪程序堕胎的工具

时间:2017-10-29 13:09:29

标签: c++ debugging gdb runtime-error

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

程序运行,但每隔约30分钟代码停止运行,我试图理解为什么。到目前为止,我试图:

  1. try-catch全部放在代码上:main和每个线程 - 程序在没有捕获的情况下停止运行:

    try
    {
     //code
    }
    catch(const std::exception & e)
    {
    
    }
    catch(...)
    {
    
    }
    
  2. 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:我把

      (gdb) catch throw
      (gdb) run
      
    2. 代码开始运行但似乎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)
      

      如果我在这里做错了,我会很高兴知道出了什么问题,如果没有,是否有其他方法\工具来追踪问题?

      我开始认为可能是导致此问题的程序外部的东西(?)。

      感谢。

1 个答案:

答案 0 :(得分:1)

在退出的所有内容上放置断点

b exit
b _exit
b __exit
b exit_group

如果你不在其他地方使用它们,也可以杀死变种

b kill