gdb how to get thread name displayed

18.4k views Asked by At

There are many threads created in my application. some of the threads name are visible in the gdb while i execute the command 'info threads', others are not displayed. How to get all the thread name itself instead of the hex value like 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 ()
4

There are 4 answers

0
Tom Tromey On BEST ANSWER

If you upgrade to gdb 7.3 or later, "info thread" will show thread names; at least on native (not remote) Linux.

1
James M On

Threads don't have names by default - the JKMainT string there is the name of the current function.

Try selecting one of the threads and viewing the backtrace - that might give you a good idea which thread it is. Otherwise, you could try prctl with PR_SET_NAME if it's available.

1
Boopathy Madeshwaran On
  • (gdb) info threads - will display all the threads

  • (gdb) thread will switch to the thread you selected and display the thread name

  • (gdb) thread - will display current thread name

1
manylegged On

You can set the thread name via non-standard POSIX api calls. GDB (and other debuggers) will display these names.

On Linux

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

On Mac

pthread_setname_np("My thread name");