2011-12-05 5 views
8

मैं gdbserver का उपयोग कर एक एम्बेडेड डिवाइस से डिबगिंग हूँ प्रदर्शित नहीं करता है:GDB फ़ंक्शन नाम

./gdbserver HOST:5000 /home/test_app 

मेरे पीसी में, मैं इस तरह से gdb निष्पादित करें:

arm-none-linux-gnueabi-gdb test_app 

एक बार आवेदन निष्पादित हो रहा है , मैं sEGFAULT मैं डिबग करना चाहते हैं प्राप्त करते हैं, लेकिन यह पता है कि लाइन यह उत्पादन असंभव है:

Program received signal SIGSEGV, Segmentation fault. 
[Switching to Thread 715] 
0x31303030 in ??() 
(gdb) bt 
#0 0x31303030 in ??() 
#1 0x0000dff8 in ??() 
#2 0x0000dff8 in ??() 
Backtrace stopped: previous frame identical to this frame (corrupt stack?) 

(मैं कहना होगा मैं totall हूँ वाई जीडीबी के लिए नया)

+1

आप किस झंडे के साथ संकलित करते थे? क्या जीडीबी जानता है कि आपकी स्रोत फाइलें कहां से प्राप्त करें ताकि यह उस लाइन को प्रदर्शित कर सके जिस पर यह रुक गया है? –

+1

मुझे समझ में नहीं आता है। आपका पीसी एआरएम है? और आप जीडीबी सर्वर से कनेक्ट होने लगते नहीं हैं। –

+1

क्या आप कृपया अपनी कंपाइलर निष्पादन लाइन और अपने पूर्ण जीडीबी आदेश पोस्ट कर सकते हैं? मैं तोमालक गेरेकल के साथ सहमत हूं कि निश्चित रूप से यहां कुछ याद आ रही है, कम से कम जीडीबी सर्वर से कनेक्ट करें और स्रोत निर्देशिका सेट करने के लिए कमांड। – thiton

उत्तर

10

ठीक है यह आम तौर पर होता है अगर डिबग प्रतीकों याद कर रहे हैं है ... बस आदेशों

file <your_executable> 

आप प्रारूप, मेहराब आदि की तरह अपने द्विआधारी पर जानकारी मिल जाएगा निम्नलिखित यकीन है कि रन बनाने के लिए .. जानकारी का अंतिम भाग वर्णन करता है कि बाइनरी छीन ली गई है या नहीं। जीडीबी में डिबगिंग के लिए बाइनरी को छीनना नहीं चाहिए था।

nm --debug-sym <your_executable> | grep debug 

यदि आपके पास नीचे के कुछ वैध प्रिंट हैं तो इसका मतलब है कि डीबग प्रतीक मौजूद हैं।

00000000 N .debug_abbrev 
00000000 N .debug_aranges 
00000000 N .debug_frame 
00000000 N .debug_info 
00000000 N .debug_line 
00000000 N .debug_loc 
00000000 N .debug_pubnames 
00000000 N .debug_str 

इसके अलावा आप GDB जब आह्वान आप लाइन

Reading symbols from <your_executable>...done. 

follwing जाना चाहिए था इस बिंदु पर आप list कमांड के साथ स्रोतों को सूचीबद्ध करने के लिए सक्षम होना चाहिए।

सुनिश्चित करें कि दोनों gdb और gdbserver के समान संस्करण हैं।

arm-none-linux-gnueabi-gdb --version 
./gdbserver --version 

तो सब से ऊपर सत्य हैं, और आप अभी भी पश्व-अनुरेखन नहीं मिलता है, वहाँ कुछ बुरा अपने ढेर के साथ चल रहा है। कुछ स्थिर विश्लेषण चलाने का प्रयास करें, अपने कोड/नए जोड़े गए कोड पर valgrind।

+0

धन्यवाद! मुझे डर है कि मैंने इसे छीन लिया ... – funkadelic

+0

मुझे नहीं लगता कि यह जवाब सच है। मुझे दृश्य फ़ंक्शन नामों के साथ कई अलग-अलग फ़ाइलें मिली हैं (लेकिन कोई स्रोत पुन: उत्पन्न नहीं किया जा सकता है) – Blauhirn

5

आपको डीबग प्रतीकों सक्षम के साथ अपना एप्लिकेशन बनाना होगा। जीसीसी के लिए स्विच -g

+0

जो निश्चित रूप से एक पहलू है, लेकिन gdbserver के साथ क्रॉस-डिबगिंग करने के लिए और भी कुछ है। ओपी ने अभी तक सवाल का जवाब देने के लिए पर्याप्त जानकारी पोस्ट नहीं की है। – thiton

+0

अब मैं पूर्ण संकलन विकल्पों को पोस्ट नहीं कर सकता हूं ... लेकिन मैंने प्रयोग किया - जी। जानकारी के लिए – funkadelic