跟踪程序堕胎的工具

问题描述 投票:0回答:1

我在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:我说 (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)

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

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

谢谢。

c++ debugging gdb runtime-error
1个回答
1
投票

在所有退出的东西上放置断点

b exit
b _exit
b __exit
b exit_group

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

b kill
© www.soinside.com 2019 - 2024. All rights reserved.