5

我正在使用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 的增加。

线程来来去去太快,无法使用单击状态->线程的窗口显示。你能告诉我如何获取有关该线程的信息吗?

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

谢谢大家AFG

4

2 回答 2

9

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

关于如何处理那些产生和死亡的线程:您可以尝试在 处设置一个断点clone,这是他的系统调用(我对吗?),它在给定函数处启动一个新线程。

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

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

更新:为我设置一个断点clone......至少在我的测试中。我应该补充一点,这是特定于 linux 的——实际上是它的pthread_create用途。

于 2011-01-14T15:43:49.860 回答
4

在 pthread_create 处设置断点。

(gdb) break pthread_create
Breakpoint 1 at 0x20c49ba5cabf44

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

于 2011-01-14T15:53:08.013 回答