我正在使用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
答案 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
来查看调用者是谁。