2012-01-20 29 views
8

Có nhiều chủ đề được tạo trong ứng dụng của tôi. một số tên chủ đề có thể nhìn thấy trong gdb trong khi tôi thực hiện lệnh 'thông tin chủ đề', những người khác không được hiển thị. Làm thế nào để có được tất cả các tên chủ đề riêng của mình thay vì giá trị hex như 0xb7fe1424gdb cách hiển thị tên chủ đề

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

Để thêm .. Tôi đặt chia điểm tại mylib.cpp: 482, và xuống dòng nó tạo ra một chủ đề. – Whoami

+1

Đó không phải là tên luồng, đó là tên của hàm mà luồng đó hiện đang thực hiện. –

Trả lời

8

Chủ đề không có tên theo mặc định - chuỗi JKMainT có tên của chức năng hiện hành.

Hãy thử chọn một trong các chủ đề và xem backtrace - có thể cung cấp cho bạn ý tưởng hay về chủ đề đó. Nếu không, bạn có thể thử prctl với PR_SET_NAME nếu có.

+4

cách dễ dàng hơn để thực hiện điều này là pthread_setname_np (pthread_t *, const char *) – manylegged

4

Nếu bạn nâng cấp lên gdb 7.3 hoặc mới hơn, "chuỗi thông tin" sẽ hiển thị tên luồng; ít nhất là trên Linux (không phải từ xa).

4

Bạn có thể đặt tên luồng thông qua các cuộc gọi api POSIX không chuẩn. GDB (và các trình gỡ rối khác) sẽ hiển thị các tên này.

Trên Linux

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

Trên Mac

pthread_setname_np("My thread name"); 
Các vấn đề liên quan