我正在尝试调试一个相当复杂的程序,该程序存在段错误。我刚刚了解了 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/