Saya memiliki beberapa pustaka terkompilasi di x86 Linux dan saya ingin segera menentukan apakah mereka dikompilasi dengan simbol debugging.
c
debugging
gdb
debug-symbols
Dan Hook
sumber
sumber
obdjump -W lib
danreadelf -w lib
. Yang terakhir lebih dapat dikonfigurasi - lihat halaman manual readelf (1).objdump -g
tidak memberi saya apa-apa untuk tes sederhana.o dikompilasi dengan dan tanpag
, membuatnya tidak berguna secara efektif. Ubuntu 12.04, gcc 4.6.3, GNU objdump 2.22.nm -a
sepertinya lebih berguna.Perintah yang disarankan
memberi saya hasil yang selalu sama setidaknya di Ubuntu / Linaro 4.5.2:
tidak peduli apakah arsip / perpustakaan bersama dibuat dengan atau tanpa
-g
opsiYang sangat membantu saya untuk menentukan apakah
-g
digunakan adalah alat readelf :atau
Ini akan mencetak serangkaian baris yang terdiri dari nama file sumber, nomor baris dan alamat jika info debug tersebut dimasukkan ke dalam perpustakaan , jika tidak maka tidak akan mencetak apa pun .
Anda dapat memberikan nilai apa pun yang menurut Anda diperlukan untuk
--debug-dump
opsi, bukandecodedline
.sumber
Yang membantu adalah:
Ini mencetak ketika simbol debug tidak ditemukan:
Atau saat ditemukan:
Tak satu pun dari jawaban sebelumnya memberikan hasil yang berarti bagi saya: libs tanpa simbol debug memberikan banyak keluaran, dll.
sumber
nm -a <lib>
akan mencetak semua simbol dari perpustakaan, termasuk yang debug.Jadi, Anda dapat membandingkan output dari
nm <lib>
dannm -a <lib>
- jika berbeda, lib Anda berisi beberapa simbol debug.sumber
nm -a
memiliki aliasnm --debug-syms
yang cukup jelas :-).diff <(nm <lib>) <(nm -a <lib>)
untuk mendapatkan perbedaan yang mudahDi OSX, Anda dapat menggunakan
dsymutil -s
dandwarfdump
.Menggunakan
dsymutil -s <lib_file> | more
Anda akan melihat jalur file sumber dalam file yang memiliki simbol debug, tetapi hanya nama fungsi yang sebaliknya.sumber
dsymutil -s
,? Apakah keberadaan output berarti bahwa itu dibangun dengan simbol debug, atau haruskah itu di-grep?Anda dapat menggunakan objdump untuk ini.
EDIT: Dari halaman manual:
sumber
Jawaban yang menyarankan penggunaan
objdump --debugging
ataureadelf --debug-dump=...
tidak berfungsi jika informasi debug disimpan dalam file yang terpisah dari biner, yaitu biner berisi bagian tautan debug . Mungkin orang bisa menyebutnya sebagai bugreadelf
.Kode berikut harus menangani ini dengan benar:
Lihat File Debug Terpisah di manual GDB untuk informasi lebih lanjut.
sumber