2011-06-18 14 views
7

जीसीसी (जीसीसी) 4.6.0 जीएनयू gdb (GDB) फेडोरा (7.2.90.20110525-38.fc15)डीबगिंग प्रतीक क्या दिखते हैं?

मैं हाल ही में एक समस्या है जब मैं gdb का उपयोग कर अपनी समस्या डिबग करने के लिए कोशिश कर रहा था था। जब मैं लोड मेरी बाइनरी gdb शिकायत की, जब मैं निम्नलिखित किया

"नहीं डिबगिंग प्रतीकों पाए गए" तो:

nm ass1 

मुझे मिल निम्नलिखित निर्गम (केवल नमूना)

00000000006026e0 t __init_array_end 
00000000006026d0 t __init_array_start 
00000000004020e0 T __libc_csu_fini 
0000000000402050 T __libc_csu_init 
       U [email protected]@GLIBC_2.2.5 
00000000006029ec A _edata 
0000000000602b28 A _end 
000000000040212c T _fini 
0000000000401420 T _init 
0000000000401610 T _start 
       U [email protected]@GLIBC_2.2.5 
000000000040163c t call_gmon_start 
0000000000602b10 b completed.5886 
00000000006029e8 W data_start 
0000000000602b18 b dtor_idx.5888 
00000000004016d0 t frame_dummy 
00000000004016f4 T main 

समस्या मैं-जी जोड़ने के लिए भूल गया था। तो मैंने-साथ संकलन करने का फैसला किया और फिर एनएम चलाया। मैं एक simliar उत्पादन हो गया है, इस डिबग प्रतीक के रूप में मैं जी इस्तेमाल किया है, और gdb इस बार शिकायत नहीं की थी: द्विआधारी आकार में बड़ा किया जा रहा है के अलावा

    U [email protected]@GLIBC_2.2.5 
00000000006029ec A _edata 
0000000000602b28 A _end 
000000000040212c T _fini 
0000000000401420 T _init 
0000000000401610 T _start 
       U [email protected]@GLIBC_2.2.5 
000000000040163c t call_gmon_start 
0000000000602b10 b completed.5886 
00000000006029e8 W data_start 
0000000000602b18 b dtor_idx.5888 
00000000004016d0 t frame_dummy 
00000000004016f4 T main 
       w pthread_cancel 

। मैं एनएम का उपयोग कर किसी भी अलग नोटिस देख सकता था। मैं सोच रहा हूं कि मुझे क्या देखना चाहिए? डीबग प्रतीक क्या दिखते हैं?

किसी भी सुझाव के लिए बहुत धन्यवाद,

उत्तर

7

nm डिफ़ॉल्ट रूप से छुपाता डिबग प्रतीकों। उन्हें दिखाने के लिए -a विकल्प का उपयोग करें।

आधुनिक सिस्टम अक्सर डीबग प्रतीकों प्रति से का उपयोग नहीं करते हैं। stabs डीबग प्रारूप a.out प्रारूप निष्पादन योग्य के साथ उपयोग के लिए विकसित किया गया था, जो केवल सीमित आंतरिक संरचना का प्रतिनिधित्व कर सकता है; इसने प्रतीक तालिका में काफी सारी चीजें छिपाने का नेतृत्व किया, जैसे डिबग प्रतीकों और initializers/constructors। सीओएफएफ (अब ज्यादातर अप्रचलित) और ईएलएफ फ़ाइल प्रारूप मनमानी वर्गों के उपयोग की अनुमति देते हैं, और अधिकांश आधुनिक लिनक्स वितरण को DWARF 2 डीबगिंग जानकारी का उपयोग करने के लिए कॉन्फ़िगर करते हैं। उस जानकारी की जांच के लिए आपको जीएनयू objdump का उपयोग करने में सक्षम होना चाहिए।

(मैं एक मशीन जिसका binutilsstabs या जीएनयू stabs+ प्रारूप उत्पन्न होगा की पहुंच है करने के लिए प्रकट नहीं है, इसलिए मैं जानकारी के लिए Google लिए स्थगित की जाती है।)

+0

मैं के साथ किया है कि -एक साथ दोनों मामलों के साथ और बिना संकलन। हालांकि, मुझे बहुत सारे प्रतीकों मिलते हैं, लेकिन कौन से लोग डीबग हैं? धन्यवाद। – ant2009

+0

लेमे एनोटेट। आपके पास कोई प्रतीक नहीं हो सकता है; लिनक्स अक्सर डीडब्ल्यूएआरएफ 2 डीबगिंग जानकारी का उपयोग करता है, जो प्रतीक तालिका के बजाय अलग-अलग ईएलएफ सेगमेंट में संग्रहीत होता है (बाद वाला सीमित 'ए.ओ.ओ. प्रारूप' से होल्डओवर होता है)। – geekosaur

संबंधित मुद्दे