2009-09-17 14 views
14

पर मैं थ्रेड बनाने वाले प्रोग्राम के लिए जीडीबी में लिनक्स में ब्रेकपॉइंट सेट करने का प्रयास कर रहा हूं। मैं थ्रेड सृजन पर ब्रेकपॉइंट सेट करना चाहता हूं, लेकिन दुर्भाग्य से pthread_create एक संस्करण वाला प्रतीक है, और मुझे इसका पूरा नाम नहीं मिल सकता है।gdb breakpoint pthread_create

अगर मैं टाइप करें:

catch thread_start 

मैं

Catch of thread_start not yet implemented 

प्राप्त कैसे इस स्थिति के लिए gdb में धागा निर्माण को पकड़ने के लिए सबसे अच्छा तरीका है?

उत्तर

15

इस प्रयास करें:

(gdb) b __pthread_create_2_1 

या अपनी GDBthis patch के साथ लागू निर्माण।

या नवीनतम रिलीज GDBhere है, जो आपको बस इतना करना "catch syscall clone"

2

ठीक अनुमति चाहिए, मैं क्योंकि मुझे यकीन है कि अगर मैं अपने प्रश्न समझ में नहीं कर रहा हूँ दो उत्तर पोस्ट करने के लिए, जा रहा हूँ कोशिश।

पहला: pthread_create एक साझा लाइब्रेरी में है, और gdb जानता है कि इसे कैसे संभालना है। यदि आप बस "ब्रेक pthread_create" कहते हैं, तो इसे "बस काम करना चाहिए"।

आप इस पता करने की जरूरत नहीं होनी चाहिए, लेकिन जिस तरह से यह काम करना चाहिए कि gdb एक प्रतीक "pthread_create @ plt" है, जो एक ठूंठ कि में गतिशील लोडर ओर जाता है मिलेगा, और अंततः बदल दिया जाएगा है उचित साझा लाइब्रेरी फ़ंक्शन पर कूदकर। हम वहां एक ब्रेकपॉइंट सेट करेंगे, और जीडीबी स्वचालित रूप से सही साझा लाइब्रेरी फ़ंक्शन तक पहुंचने (और रोक) तक डायनामिक लोडर से निपटेंगे।

अब मामला है कि, आप के लिए यह समाधान नहीं करता है मेरी दूसरी जवाब देने के लिए पर में ...

15

ठीक है, तो इस मामले में मैं वास्तव में आप समझ में नहीं आया, या मेरा पहला जवाब सहायक नहीं था, ऐसा करते हैं:

(gdb) info func pthread_create 
All functions matching regular expression "pthread_create": 

Non-debugging symbols: 
0x080485e0 pthread_create 
0x080485e0 [email protected] 
0x00786590 __pthread_create_2_1 
0x00786590 [email protected]@GLIBC_2.1 
0x00786ee0 __pthread_create_2_0 
0x00786ee0 [email protected]_2.0 

अब प्रतीक आपको लगता है कि सही एक है लेने, और वहाँ एक ब्रेकपाइंट निर्धारित किया है। उन लोगों को न चुनें जिनके पास "@" है, लेकिन उनमें से एक है जिसमें और अंडरस्कोर हैं, जैसे कि 1__pthread_create_2_1।