跟踪程序堕胎的工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟踪程序堕胎的工具相关的知识,希望对你有一定的参考价值。

我在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)

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

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

谢谢。

答案

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

b exit
b _exit
b __exit
b exit_group

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

b kill

以上是关于跟踪程序堕胎的工具的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase 分析跟踪 android 片段

在 Firebase 中禁用自动活动跟踪

php 一个短代码片段准备在WooCommerce Thank You页面上输出货件跟踪UI。

css 每年堕胎计数器更新秒数。

性能有瓶颈?3 个实时可视化 Python 工具包来帮你!

跟踪活动中的片段[关闭]