GDB, как получить имя потока отображается - PullRequest
8 голосов
/ 20 января 2012

В моем приложении создано много тем.Некоторые имена потоков отображаются в 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 ()

Ответы [ 3 ]

8 голосов
/ 20 января 2012

У потоков нет имен по умолчанию - строка JKMainT содержит имя текущей функции.

Попробуйте выбрать один из потоков и просмотреть обратную трассировку - это может помочь вам понять, какой это поток. В противном случае вы можете попробовать prctl с PR_SET_NAME, если он доступен.

6 голосов
/ 01 июля 2014

Если вы обновитесь до GDB 7.3 или более поздней версии, «info thread» покажет имена потоков;по крайней мере на родном (не удаленном) Linux.

5 голосов
/ 29 декабря 2014

Вы можете установить имя потока с помощью нестандартных вызовов API POSIX. 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");
...