2011-01-14 53 views
2

我正在使用ddd调试多线程应用程序。获取有关gdb/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

回答

3

LWP是一个缩写词,代表轻量级进程。它实际上是每个新产生的线程的线程ID

关于如何处理这些产卵和垂死的线程:你可以尝试在clone处设置一个断点,这是他的系统调用(我是否正确?),它在给定函数处启动一个新线程。

注:当clone打破你从哪里线程将开始知道,但实际上并没有一个线程,然后你可以然而,在指定的参数来clone功能集破发点...

也就是说,使用start命令从gdb或ddd启动程序,该命令在程序入口点(即main)设置临时中断点,比在clone处设置中断点,继续并查看会发生什么;)。

更新:在clone设置一个中断点适用于我......至少在我的测试中。我应该补充说这是linux特有的 - 实际上是pthread_create使用的。

+0

嘿!非常感谢解释。让我试试,我会回到你身边(周末我在外面回家)! – 2011-01-17 09:42:53

2

在pthread_create处设置断点。

(gdb) break pthread_create 
Breakpoint 1 at 0x20c49ba5cabf44 

现在,当你运行它,它会在下次调用创建一个线程发生停止执行,并且您可以键入where,看看谁来电了。