2012-01-20 16 views
8

मेरे आवेदन में कई धागे बनाए गए हैं। कुछ धागे का नाम जीडीबी में दिखाई देता है जबकि मैं कमांड 'जानकारी थ्रेड' निष्पादित करता हूं, अन्य प्रदर्शित नहीं होते हैं। 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

धागे की तरह हेक्स मान डिफ़ॉल्ट रूप से नाम नहीं हैं मिलता है।

धागे में से एक को चुनने और बैकट्रैक देखने का प्रयास करें - जो आपको एक अच्छा विचार दे सकता है कि यह कौन सा धागा है। अन्यथा, यदि आप उपलब्ध हैं तो PR_SET_NAME के साथ prctl आज़मा सकते हैं।

+4

ऐसा करने का एक आसान तरीका है pthread_setname_np (pthread_t *, const char *) – manylegged

4

यदि आप gdb 7.3 या बाद में अपग्रेड करते हैं, तो "जानकारी थ्रेड" थ्रेड नाम दिखाएगा; कम से कम देशी (रिमोट नहीं) लिनक्स पर।

4

आप थ्रेड नाम को गैर मानक पॉज़िक्स एपीआई कॉल के माध्यम से सेट कर सकते हैं। जीडीबी (और अन्य डिबगर्स) इन नामों को प्रदर्शित करेंगे।

मैक

पर लिनक्स

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

पर

pthread_setname_np("My thread name");