2012-01-20 7 views
8

내 응용 프로그램에서 많은 스레드가 생성되었습니다. 일부 스레드 이름은 gdb에서 볼 수 있지만 'info threads'명령을 실행하면 다른 스레드는 표시되지 않습니다. 현재 함수의 이름이있는 JKMainT 문자열 - 어떻게 모든 스레드 이름 자체를 대신 기본적으로 이름이없는 0xb7fe1424gdb 스레드 이름을 표시하는 방법

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

더 추가하려면 .. 내가 mylib.cpp에서 브레이크 포인트 넣어 : 482, 및 선 아래로는 스레드를 생성한다. – Whoami

+1

이것은 스레드 이름이 아니며, 그 스레드가 현재 실행중인 함수의 이름입니다. –

답변

8

스레드와 같은 16 진수 값을 얻을 수 있습니다.

스레드 중 하나를 선택하고 백 트레이스를 보는 것이 좋습니다. 그러면 스레드가 어떤 것인지 알 수 있습니다. 그렇지 않은 경우 prctlPR_SET_NAME (가능한 경우)으로 시도 할 수 있습니다.

+4

더 쉬운 방법은 pthread_setname_np (pthread_t *, const char *)입니다. – manylegged

4

gdb 7.3 이상으로 업그레이드하면 "info thread"가 스레드 이름을 표시합니다. 적어도 네이티브 (원격이 아닌) 리눅스에서.

4

비표준 POSIX API 호출을 통해 스레드 이름을 설정할 수 있습니다. GDB (및 다른 디버거)는 이러한 이름을 표시합니다. 맥

에 리눅스

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

pthread_setname_np("My thread name"); 
관련 문제