रिमोट डिबगिंग
ऐलिस और बॉब दूरस्थ डीबगिंग का उपयोग करना चाहिए। बॉब gdbserver शुरू होता है:
[email protected]:/home/bob$ gdbserver :2345 ./helloworld
और ऐलिस उससे कनेक्ट:
[email protected]:/home/alice$ gdb
[...]
(gdb) file helloworld
Reading symbols from /home/alice/helloworld...done.
(gdb) target remote :2345
Remote debugging using :2345
[...]
0x00007fbdc6329af0 in _start() from /lib64/ld-linux-x86-64.so.2
निरपेक्ष पथ
यह इस सरल मामले में काम करता है के साथ रिमोट डिबगिंग। हालांकि, कुछ अधिक परिष्कार जब बॉब अपने साझा पुस्तकालयों के लिए पूर्ण पथ का उपयोग करता requried है:
[email protected]:/home/bob$ ls
helloworld libmylib.so
[email protected]:/home/bob$ LD_LIBRARY_PATH=/home/bob gdbserver :2345 ./helloworld
अब
, ऐलिस साझा लाइब्रेरी नहीं मिल सकता है:
[email protected]:/home/alice$ gdb
[...]
(gdb) file helloworld
Reading symbols from /home/alice/helloworld...done.
(gdb) target remote :2345
Remote debugging using :2345
[...]
(gdb) break helloWorld()
Breakpoint 1 at 0x400480
(gdb) c
Continuing.
Error while mapping shared library sections:
/home/bob/libmylib.so: No such file or directory.
इस हल करने के लिए, ऐलिस एक आभासी बनाता है बाइनरी पर इसके के लिंक के साथ रूट फ़ोल्डर:
:
[email protected]:/home/alice$ mkdir -p gdb-symbols/home/
[email protected]:/home/alice$ ln -s /home/alice gdb-symbols/home/bob
[email protected]:/home/alice$ ln -s /lib gdb-symbols/lib
[email protected]:/home/alice$ ln -s /lib64 gdb-symbols/lib64
[and so forth for every shared library that cannot be found...]
और अब सभी प्रतीकों लोड के साथ डिबग करने में सक्षम है
[email protected]:/home/alice$ gdb
[...]
(gdb) file helloworld
Reading symbols from /home/alice/helloworld...done.
(gdb) target remote :2345
Remote debugging using :2345
[...]
Reading symbols from /home/alice/gdb-symbols/home/bob/libmylib.so...done.
Loaded symbols from /home/alice/gdb-symbols/home/bob/libmylib.so
(gdb)
स्रोत
2012-01-05 09:49:14
एलिस-बॉब मेमे का उपयोग करके इस प्रश्न को phrasing पर Kudos, यह बहुत समझने योग्य और अच्छी तरह से जवाब देने में बेहद आसान बनाता है। – parasietje