我的应用程序中创建了许多线程。当我执行命令'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 ()
答案 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");