từ xa gỡ lỗi
Alice và Bob nên sử dụng gỡ lỗi từ xa. Bob bắt đầu gdbserver:
[email protected]:/home/bob$ gdbserver :2345 ./helloworld
Và Alice kết nối với nó:
[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
từ xa gỡ lỗi với đường dẫn tuyệt đối
này hoạt động trong trường hợp đơn giản này. Tuy nhiên, một số tinh tế hơn là requried khi Bob sử dụng đường dẫn tuyệt đối cho các thư viện chia sẻ của mình:
[email protected]:/home/bob$ ls
helloworld libmylib.so
[email protected]:/home/bob$ LD_LIBRARY_PATH=/home/bob gdbserver :2345 ./helloworld
Bây giờ, alice không thể tìm thấy thư viện chia sẻ:
[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.
Để giải quyết điều này, Alice tạo ảo thư mục gốc có liên hệ với mình trên mã nhị phân:
[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...]
Và bây giờ là có thể gỡ lỗi với tất cả những biểu tượng nạp:
[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)
Nguồn
2012-01-05 09:49:14
Những âm mưu về cách phân biệt câu hỏi này bằng meme Alice-Bob, nó làm cho nó rất dễ hiểu và rất dễ trả lời tốt. – parasietje