2013-11-22 6 views
5

मेरे पास x86 लिनक्स पर कुछ संकलित लाइब्रेरी यानी साझा लाइब्रेरी (i.e। * .so) है और मैं जल्दी से यह निर्धारित करना चाहता हूं कि उन्हें डिबगिंग प्रतीकों (यानी विकल्प -g/डीबग बिल्ड के साथ) के साथ संकलित किया गया था या नहीं।दी गई साझा लाइब्रेरी को कैसे पता चलाना डीबग सिंबोस के साथ बनाया गया है या नहीं?

इसे कैसे जांचें?

+0

objdump filename -x | grep 'debug' – starrify

+0

संभावित डुप्लिकेट [कैसे जांचें कि प्रोग्राम डीबग प्रतीकों के साथ संकलित किया गया था?] (http://stackoverflow.com/questions/3284112/how-to-check-if-program-was-compiled-with- डीबग-प्रतीकों) –

उत्तर

9

आप file कमांड का उपयोग यह देखने के लिए कर सकते हैं कि कोई फ़ाइल stripped है या नहीं। असल में, इसका मतलब है कि डिबगिंग प्रतीक वहां हैं या नहीं।

$ file libjsd.so 
    libjsd.so: ELF 32-bit LSB shared object, \ 
    Intel 80386, version 1 (SYSV), dynamically linked, 
    stripped 

सूचना छीन:

यहाँ मेरी प्रणाली से एक फाइल है।

$ file libprofile_rt.so 
libprofile_rt.so: ELF 64-bit LSB shared object, x86-64, 
     version 1 (SYSV), dynamically linked, 
    BuildID[sha1]=0x..., not stripped 

देख 'छीन नहीं', जो इंगित करता है कि यह प्रतीक डिबगिंग गया है:

यहाँ कुछ मैं संकलित है।

objcopy का उपयोग करके साझा ऑब्जेक्ट से डीबग प्रतीकों को अलग करना भी संभव है। यह किसी अन्य फ़ाइल में प्रतीकों को निकालेगा और फिर आपको उन्हें वापस लाने के लिए लिंक जानना होगा। आप बिल्ड-इड्स का उपयोग करके doing this with gdb के लिए निर्देश देख सकते हैं। यह सहायक है अगर आप प्रतीकों के बिना कुछ देना चाहते हैं लेकिन फिर इसे डंप से चुटकी में डीबग करने में सक्षम हो।

+0

मैं libQt5Gui.so.5.5.1 देख सकता हूं जिसमें विभिन्न फ़ाइल libQt5Gui.so.5.5.1.debug में डीबग प्रतीक हैं लेकिन फ़ाइल कमांड libQt5Gui.so.5.5.1 के लिए नहीं छोड़ा गया है – Mohit

5

ध्यान दें कि not stripped डीबग प्रतीकों का संकेत नहीं देता है।

लाइब्रेरी कोड:

//myshared.c 
#include <stdio.h> 

void print_from_lib() 
{ 
    printf("Printed from shared library\n"); 
} 

साथ और डिबग झंडे के बिना संकलन:

gcc -c -Wall -Werror -fpic myshared.c 
gcc -shared -o libmyshared.so myshared.o 
gcc -g -c -Wall -Werror -fpic myshared.c -o myshared-g.o 
gcc -g -shared -o libmyshared-g.so myshared-g.o 

file

$ file libmyshared.so 
libmyshared.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=1ad3b94d5c8a7392c2140a647254753221a152cd, not stripped 
$ file libmyshared-g.so 
libmyshared-g.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0268eaf97e5a670d2f7e767a011be6f06a83090a, not stripped 

दोनों दावा वे छीन नहीं कर रहे हैं के साथ जांच की जा रही। हालांकि केवल libmyshared-g.so प्रतीकों को दिखाता है:

$ objdump --syms libmyshared.so | grep debug 
$ objdump --syms libmyshared-g.so | grep debug 
0000000000000000 l d .debug_aranges 0000000000000000    .debug_aranges 
0000000000000000 l d .debug_info 0000000000000000    .debug_info 
0000000000000000 l d .debug_abbrev 0000000000000000    .debug_abbrev 
0000000000000000 l d .debug_line 0000000000000000    .debug_line 
0000000000000000 l d .debug_str 0000000000000000    .debug_str 
संबंधित मुद्दे