डीबग संस्करण का उपयोग कैसे करें प्रश्न का संक्षिप्त संस्करण: libc के लिए डीबगिंग प्रतीकों का उपयोग करने के लिए मैं gdb कैसे प्राप्त कर सकता हूं?libc
अधिक बड़ा संस्करण: मैं gdb के साथ एक कार्यक्रम डिबगिंग रहा हूँ और मैं libc द्वारा प्रयुक्त futex के बारे में जानकारी देखना चाहते हैं।
Catchpoint 2 (call to syscall futex), 0x00007ffff772b73e in ??() from /lib/libc.so.6
(gdb) bt
#0 0x00007ffff772b73e in ??() from /lib/libc.so.6
#1 0x00007ffff767fb90 in ??() from /lib/libc.so.6
#2 0x00007ffff767a4c0 in vfprintf() from /lib/libc.so.6
#3 0x00007ffff768565a in printf() from /lib/libc.so.6
....
जब मैं ब्रेकप्वाइंट पर gdb में info sharedlibrary
चलाने मैं देख रहा हूँ: हालांकि, डीबगिंग के दौरान कुछ बिंदु पर मैं उत्पादन जैसे मिल
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0x00007ffff7dddaf0 0x00007ffff7df6704 Yes (*) /lib64/ld-linux-x86-64.so.2
0x00007ffff7bc53e0 0x00007ffff7bd1388 Yes (*) /lib/libpthread.so.0
0x00007ffff79ba190 0x00007ffff79bd7d8 Yes (*) /lib/librt.so.1
0x00007ffff76538c0 0x00007ffff7766c60 Yes (*) /lib/libc.so.6
0x00007ffff6c1fd80 0x00007ffff6c303c8 Yes (*) /lib/libgcc_s.so.1
(*): Shared library is missing debugging information.
और जब मैं ldd
चलाने मैं देख रहा हूँ:
linux-vdso.so.1 => (0x00007ffff7fde000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007ffff7dbf000)
librt.so.1 => /lib/librt.so.1 (0x00007ffff7bb6000)
libc.so.6 => /lib/libc.so.6 (0x00007ffff7833000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffff7fdf000)
मैं उबंटू 10.04 का उपयोग कर रहा हूं और मुझे लगता है कि डीबग प्रतीकों के साथ libc का संस्करण /usr/lib/debug/lib
में है। मैंने पथ के सामने यह LD_LIBRARY_PATH
वैरिएबल सेट करने का प्रयास किया लेकिन ऐसा कोई फर्क नहीं पड़ता।
मैं पूरी तरह से स्पष्ट नहीं हूं कि प्रोग्राम किस साझा पुस्तकालयों को लोड करने के लिए चुनता है, चाहे वह रनटाइम पर सेट हो या संकलित समय (मैं अनुमानित रनटाइम का प्रकार हूं लेकिन अब मुझे यकीन नहीं है)। तो libc के डीबग संस्करण का उपयोग करने के लिए जीडीबी कैसे प्राप्त करें इस बारे में जानकारी की सराहना की जाती है।
मेरे प्रश्न के उत्तर के लिए धन्यवाद। ऐसा लगता है कि मुझे कुछ और समस्या है क्योंकि जब मैं वर्बोज़ आउटपुट चालू करता हूं तो मुझे libc के प्रतीकों के लिए gdb खोज '/ usr/lib/debug' नहीं दिखता है। उदाहरण के लिए, मैं/lib/libc.so.6.. से प्रतीकों को पढ़ रहा हूं। (कोई डिबगिंग प्रतीक नहीं मिला) ... किया गया। 'इसलिए मुझे अभी भी कुछ समस्या है, लेकिन आपका जवाब समझने में बहुत मददगार है कि क्या वास्तविक समस्या है। अद्यतन के लिए –
धन्यवाद। मैंने अपनी होम निर्देशिका में स्रोत से जीडीबी 7.4 डाउनलोड और स्थापित किया था क्योंकि इसमें एक बग फिक्स था जिसने मुझे जीडीबी 7.1 के साथ समस्या का हल किया था, लेकिन मुझे अपने सिस्टम पर जीडीबी के संस्करण को अपडेट करने की अनुमति नहीं है। वैसे भी 'डीबग-फाइल-निर्देशिका' सही ढंग से सेट नहीं किया गया था, लेकिन इसे '.gdbinit' में सही ढंग से सेट करने से समस्या ठीक हो रही है। –
इसके अलावा, जीडीबी में libc फ़ंक्शंस में कदम उठाने के लिए, glibc स्रोत कोड डाउनलोड करना और इसे अनपैक करना सुनिश्चित करें। फिर स्रोत के पथ के साथ gdb 'directory' कमांड चलाएं। यदि आप एक डिस्ट्रो चला रहे हैं जो libc (जैसे डेबियन) को पैच करता है, तो उसी पैच को लागू करना सुनिश्चित करें (जैसे 'debuild' चलाकर), अन्यथा स्रोत पंक्ति संख्या मेल नहीं खाती है। –