Tôi có một stack trace được tạo ra bởi một ứng dụng lột mà trông như thế này:Sử dụng gdb để chuyển đổi địa chỉ cho dòng
*** Check failure stack trace: ***
@ 0x7f0e442d392d (unknown)
@ 0x7f0e442d7b1f (unknown)
@ 0x7f0e442d7067 (unknown)
@ 0x7f0e442d801d (unknown)
@ 0x7f0e457c55e6 (unknown)
@ 0x7f0e457c5696 (unknown)
@ 0x4e8765 (unknown)
@ 0x4a8b43 (unknown)
@ 0x7f0e43197ced (unknown)
@ 0x4a6889 (unknown)
Và tôi có một phiên bản không lột của thực thi và tất cả các thư viện của nó (biên soạn với thông tin gỡ lỗi). Nhưng làm thế nào tôi có thể dịch địa chỉ vào các tập tin và số dòng ??
Dưới đây là những gì tôi đã cố gắng:
gdb
set solib-absolute-prefix /path/to/non-stripped/edition/of/root/filesystem/sysroot/
file /path/to/non-stripped/edition/of/root/filesystem/sysroot/usr/bin/my-buggy-app
info line *0x7f0e457c5696
Khi tôi gõ vào lệnh tập tin nó chỉ tải biểu tượng từ các tập tin, không phải tất cả các thư viện được sử dụng. Có cách nào có thể thực hiện được không?
Các "đường dây thông tin" lệnh nói:
Không có thông tin số dòng có sẵn cho địa chỉ 0x7f0e442d801d
Mà tôi giả định là bởi vì địa chỉ là một trong các thư viện chia sẻ, nhưng làm thế nào có thể Tôi biết trong đó một trong số họ?
['addr2line'] (http://linuxcommand.org/man_pages/addr2line1.html)? –
@ another.anon.coward Năm, tôi đã thử điều đó nhưng tôi không biết cách xem tệp nào, vì địa chỉ trỏ đến thư viện được chia sẻ. – Allan
@Allan: bạn có thể sử dụng lệnh 'info sharedlibrary' để biết thư viện chia sẻ địa chỉ' 0x7f0e442d801d' thuộc về. – ks1322