c++ - 如何判断哪一行代码创建了新线程(gdb)?

标签 c++ multithreading segmentation-fault gdb

我正在尝试调试一个相当复杂的程序,该程序存在段错误。我刚刚了解了 gdb 并试图用它来查找问题。目前显示

[New Thread 0x7fff4963700 (LWP 4768)]
[New Thread 0x7fff1faf700 (LWP 4769)]
[New Thread 0x7fff17ae700 (LWP 4768)]

我的计划开始后不久。如果我编写了多线程代码,那就太好了,但我没有。有没有办法准确判断是哪一行代码创建了这些新线程?

最佳答案

在 Linux 上工作,catch syscall clone 应该会在所有线程(可能还有一些进程)创建时中断。请注意,它将中断创建者线程(=新线程尚未启动)。

由于您获得了通向clone 的完整回溯,如果您需要提取新的线程入口点,您应该执行up 直到到达 pthread_create(或类似的库函数)堆栈帧并从其参数中获取它(您也可以直接检查参数以clone,但我担心那里会有一些pthread库的地址 stub )。

关于c++ - 如何判断哪一行代码创建了新线程(gdb)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241413/

相关文章:

c - 使用 Scanf 在二维数组中存储输入

c++ - C++中的模板函数重载

c++ - KDevelop 中的项目文件

ios - 在 AppDelegate 中运行 CKQuery - 等待完成

java - 是否可以使用两个 AtomicIntegers 的线程安全方法?

c - 无法连接两个字符串并从函数返回它

c++ - GLSL法线贴图问题

c++ - MacOS clang 通过 Homebrew 在 Mojave `wchar.h` 下损坏

java - Java 中如何合并线程?

c - 将 CSV 解析为动态分配的结构数组 (ANSI 89)