11

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 ()
Whoami
  • 13,930
  • 19
  • 84
  • 140

4 Answers4

10

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

Tom Tromey
  • 21,507
  • 2
  • 45
  • 63
9

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");
manylegged
  • 794
  • 7
  • 14
8

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.

James M
  • 18,506
  • 3
  • 48
  • 56
0
  • (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

  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Sep 27 '21 at 14:03