के साथ स्टेपिंग मेरे पास एक सामान्य gdb/gdbserver प्रश्न है। मैं दूरस्थ लक्ष्य पर मेजबान और gdbserver पर gdb का उपयोग कर एक arm linux एम्बेडेड अनुप्रयोग डीबग करने की कोशिश कर रहा हूँ। मैं मुख्य की शुरुआत में कोड की रेखाओं के माध्यम से कदम उठा सकते हैं। हालांकि, साझा लाइब्रेरी फ़ंक्शंस में कॉल के बाद gdb (या gdbserver) खो जाता प्रतीत होता है। यहां तक कि जब मैं कॉल के बाद ब्रेकपॉइंट सेट करता हूं और जारी रहता हूं, तब भी यह ब्रेकपॉइंट को हिट नहीं करता है। मुझे पता है कि मेरे पास साझा पुस्तकालयों में प्रतीकों नहीं हैं और वास्तव में उनमें कदम रखने की परवाह नहीं है। क्या मैं साझा पुस्तकालयों में प्रतीकों के बिना सफलतापूर्वक जीडीबी में लाइब्रेरी कॉल पर कदम उठाने में सक्षम नहीं होना चाहिए या कम से कम अगले ब्रेकपॉइंट पर जारी रहना चाहिए? या यह एक अलग प्रकार की समस्या का संकेत करता है?लाइब्रेरी कॉल पर gdb/gdbserver
9
A
उत्तर
1
प्रतीक के बजाय पते द्वारा ब्रेकपॉइंट, कभी-कभी अधिक विश्वसनीय होते हैं।
इस प्रयास करें:
(gdb) x/i my_func 0x12345678 <my_func> ... (gdb) break *0x12345678
आप एक अन्य स्रोत है कि इंगित करता है कि यह ब्रेकप्वाइंट पर अनुदेश (रों) निष्पादित हो रहा है से सबूत है? उच्च स्तरीय स्रोत देखने के बजाय, कुछ 'जीडीबी' की व्याख्या को देखने के लिए अलग-अलग हिस्सों को देखें। –
क्या समस्या एक विशेष साझा वस्तु के साथ होती है, या क्या आप एक मामूली "टेस्ट केस" बना सकते हैं जो समस्या को दर्शाता है? –
लंबे समय तक प्रतिक्रिया के लिए खेद है। कोड एम्बेडेड डिवाइस पर ठीक से चल रहा है। यह सिर्फ जीडीबी या gdbserver है कि खो रहा है। एक बार पुस्तकालय समारोह में कॉल करने के बाद यह कार्यक्रम में अपनी जगह का ट्रैक खो देता है और कभी भी नियंत्रण हासिल नहीं कर सकता है। मुझे नहीं लगता कि यह आवश्यक रूप से सभी लाइब्रेरी फ़ंक्शन है क्योंकि यह एक, खुले() को हिट करता है, कि यह निष्पादन में जल्दी से नहीं मिल सकता है। – Jim