获取有关gdb / ddd中的线程的信息

时间:2011-01-14 12:28:52

标签: multithreading debugging gdb ddd-debugger

我正在使用ddd调试多线程应用程序。

同时我可以在DDD 控制台上看到每秒创建一个新线程

 [NewThread 0x455fc940 (LWP 27373)]

然后立即销毁。

 [Thread 0x455fc940  (LWP 27373) exited]

几分钟后我就发了这个文字

 [NewThread 0x455fc940 (LWP 27363)]
 [Thread 0x455fc940  (LWP 27363) exited]
 [NewThread 0x455fc940 (LWP 27367)]
 [Thread 0x455fc940  (LWP 27367) exited]
 [NewThread 0x455fc940 (LWP 27373)]
 [Thread 0x455fc940  (LWP 27373) exited]
 ...and so on..

随着LWP的增加。

使用我点击Status-> Thread的窗口来显示过快且无法显示。你能否告诉我一些关于如何获取该线程的信息?

你知道为什么这个LWP一直在增加吗? 更重要的是如何获得该线程中的功能?

谢谢大家 AFG

2 个答案:

答案 0 :(得分:6)

LWP是首字母缩略词,代表轻量级过程。它实际上是每个新生成的线程的线程ID

关于那些产生和死亡的线程怎么做:你可以尝试在clone设置一个断点,这是系统调用(?我是否正确?),它在给定的函数中启动一个新线程。

注意:当在clone处断开时,您知道线程将从哪里开始,但实际上没有线程,那么您可以在作为{{1}的参数给出的函数处设置断点} ...

也就是说,使用clone命令从gdb或ddd启动程序,该命令在程序入口点(即start)设置临时断点,而不是在{{设置断点。 1}},继续看看会发生什么;)。

更新:在main设置一个断点对我有用...至少在我的测试中。我应该补充一点,这是特定于Linux的 - 实际上是clone使用的。

答案 1 :(得分:2)

在pthread_create设置断点。

(gdb) break pthread_create
Breakpoint 1 at 0x20c49ba5cabf44

现在当你运行它时,它将在下一次创建线程的调用发生时停止执行,你可以输入where来查看调用者是谁。