gdb如何显示线程名称

时间:2012-01-20 16:01:53

标签: c linux gdb pthreads

我的应用程序中创建了许多线程。当我执行命令'info threads'时,某些线程名称在gdb中可见,其他线程名称不显示。如何获取所有线程名称本身而不是像0xb7fe1424

这样的十六进制值
4 Thread 0xb68ffb70 (LWP 18377)  0xb7fe1424 in __kernel_vsyscall ()
* 3 Thread 0xb7291b70 (LWP 18375)  JKMainT (arg=0x0) at mylib.cpp:482
2 Thread 0xb7a92b70 (LWP 18374)  0xb7fe1424 in __kernel_vsyscall ()
1 Thread 0xb7a94730 (LWP 18371)  0xb7fe1424 in __kernel_vsyscall ()

3 个答案:

答案 0 :(得分:8)

默认情况下,线程没有名称 - JKMainT字符串中有当前函数的名称。

尝试选择其中一个主题并查看回溯 - 这可能会让您知道它是哪个主题。否则,如果PR_SET_NAME可用,您可以尝试prctl

答案 1 :(得分:5)

如果升级到gdb 7.3或更高版本,“info thread”将显示线程名称;至少在本机(非远程)Linux上。

答案 2 :(得分:5)

您可以通过非标准POSIX api调用设置线程名称。 GDB(和其他调试器)将显示这些名称。

在Linux上

// watch out, 16 char limit on the name
pthread_setname_np(pthread_self(), "My thread name");

在Mac上

pthread_setname_np("My thread name");