2012-12-20 35 views
15

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

+2

कोई विशेष ओएस? –

+1

'मैन एनएम' एक शुरुआत हो सकती है। –

+0

चूंकि आप सुनिश्चित हैं कि आप डीबग प्रतीकों के साथ अपनी स्थिर lib बना रहे हैं, मेरा मानना ​​है कि आपका प्रोग्राम नवीनतम स्थैतिक lib के साथ जुड़ा हुआ नहीं है। इसे अन्य मशीन पर संकलित/लिंक किया गया है या आपने इस मशीन पर इसे पुनः संयोजित/लिंक नहीं किया है। – ernesto

उत्तर

0

डाउनलोड Dependencywalker अपने OS

के लिए यदि आपका dll डिबग प्रतीकों की पहचान करेगा। यदि आपको "प्रतीक" के अंतर्गत "अमान्य" दिखाई देता है, तो इसका अर्थ है कि डीबग प्रतीकों को हटा दिया गया है। मान्य मान हैं: पीडीबी, सीवी, डीबीजी, आदि

+5

निर्भरतावालक केवल स्थिर पुस्तकालय के लिए नहीं, गतिशील पुस्तकालय का समर्थन करते हैं। इस मामले के लिए –

3

आप file कमांड का उपयोग कर सकते हैं, जो कई ओएस के लिए उपलब्ध है, जिसमें सिगविन के माध्यम से विंडोज भी शामिल है।
यदि यह कहता है कि 'छीन नहीं हुआ' तो इसका अर्थ है कि इसमें डीबग जानकारी मौजूद है।
एक साइड नोट के रूप में, स्थिर libs के लिए ar.o फ़ाइलों को निकालने के लिए & सीधे file का उपयोग करें।

+1

'फ़ाइल' ठीक है, हालांकि यह ध्यान देने योग्य है कि सामान्य स्थिति में, डीबग जानकारी के बिना एक अप्रचलित बाइनरी संभव है। – Nick

18

आप उपयोग कर सकते हैं nm के विकल्प --debug-syms, nm भी डिबगर प्रतीकों की सूची (यदि हो) वस्तु एक पुस्तकालय में पैक के लिए जाने के लिए।

डीबगर प्रतीकों के लिए दूसरा कॉलम N इंगित करता है।

उदाहरण (वस्तु example.o मानता पुस्तकालय में होना)

nm --debug-syms libexample.a 

आउटपुट (अंश):

example.o: 
0000000000000000 b .bss 
0000000000000000 n .comment 
0000000000000000 d .data 
0000000000000000 N .debug_abbrev  
0000000000000000 N .debug_aranges 
0000000000000000 N .debug_info 
0000000000000000 N .debug_line 
0000000000000000 N .debug_loc 
0000000000000000 N .debug_pubnames 
0000000000000000 N .debug_str 
0000000000000000 r .eh_frame 
0000000000000000 n .note.GNU-stack 
0000000000000000 r .rodata 
0000000000000000 t .text 
... 

अधिक जानकारी के लिए इस पर कृपया man nm देखते हैं।

+0

आज के रूप में, 2015-09-24, और मैक पर, 'फ़ाइल' कमांड में --debug-syms नहीं है। मुझे पता है कि यह एक बार पहले था। तो, यह बदल दिया जाना चाहिए। (त्रिकोणीय, यानी एनएम, ओटोल, और फ़ाइलों को समय-समय पर भारी रूप से बदला जा रहा है।) हालांकि, कार्यक्षमता अभी भी वहां है। ('फ़ाइल' संस्करण: 5.04) -D विकल्प: उदा। फ़ाइल-डी myGreadLibrary.a डी डीबगिंग संदेश प्रिंट करें। –

0

आप अपने स्थिर पुस्तकालय आकार को कम करने के लिए जांच कर सकते हैं कि आप strip -S libXX.a का उपयोग कर सकते हैं। यदि इसमें डिबगिंग प्रतीकों को शामिल नहीं किया गया है तो स्थिर लाइब्रेरी आकार नहीं बदलेगा।

यह मैक ओएस पर जेकोड द्वारा उत्पन्न स्थिर पुस्तकालय की जांच करने के लिए काम करता है।

Linux and Unix strip command