gdb如何显示线程名称

Who*_*ami 8 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 ()
Run Code Online (Sandbox Code Playgroud)

Jam*_*lin 8

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

尝试选择其中一个线程并查看回溯 - 这可能会让您知道它是哪个线程.否则,您可以尝试使用prctl,PR_SET_NAME如果可用的话.

  • 更简单的方法是pthread_setname_np(pthread_t*,const char*) (4认同)

Tom*_*mey 7

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


man*_*ged 7

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

在Linux上

// watch out, 16 char limit on the name
pthread_setname_np(pthread_self(), "My thread name");
Run Code Online (Sandbox Code Playgroud)

在Mac上

pthread_setname_np("My thread name");
Run Code Online (Sandbox Code Playgroud)