Whoami
Whoami

Reputation: 14418

gdb how to get thread name displayed

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 ()

Upvotes: 12

Views: 20306

Answers (4)

Boopathy Madeshwaran
Boopathy Madeshwaran

Reputation: 11

  • (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

Upvotes: 0

manylegged
manylegged

Reputation: 834

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");

Upvotes: 9

Tom Tromey
Tom Tromey

Reputation: 22539

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

Upvotes: 10

James M
James M

Reputation: 16718

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.

Upvotes: 8

Related Questions