Berikut adalah dua alternatif untuk addr2line
. Dengan asumsi Anda memiliki toolchain target yang tepat, Anda dapat melakukan salah satu hal berikut:
Gunakan objdump
:
-
cari
vmlinux
Anda atau.ko
file di bawah direktori root kernel, lalu bongkar file objek :objdump -dS vmlinux > /tmp/kernel.s
-
Buka file perakitan yang dihasilkan,
/tmp/kernel.s
. dengan editor teks sepertivim
. Bukaunwind_backtrace+0x0/0xf8
, yaitu mencari alamatunwind_backtrace
+offset
. Terakhir, Anda telah menemukan bagian yang bermasalah di kode sumber Anda.
Gunakan gdb
:
IMO, opsi yang lebih elegan adalah menggunakan satu-satunya gdb
. Dengan asumsi Anda memiliki toolchain yang sesuai di mesin host Anda:
- Jalankan
gdb <path-to-vmlinux>
. - Jalankan di prompt gdb:
list *(unwind_backtrace+0x10)
.
Untuk informasi tambahan, Anda dapat memeriksa sumber daya berikut:
- Trik Debugging Kernel.
- Men-debug Kernel Linux Menggunakan Gdb
Di
unwind_backtrace+0x0/0xf8
apa itu+0x0/0xf8
singkatan dari?
Angka pertama (+0x0
) adalah offset dari awal fungsi (unwind_backtrace
pada kasus ini). Angka kedua (0xf8
) adalah panjang total fungsi . Dengan adanya dua informasi ini, jika Anda sudah memiliki firasat tentang di mana kesalahan terjadi, ini mungkin cukup untuk mengonfirmasi kecurigaan Anda (Anda dapat mengetahui (secara kasar) seberapa jauh Anda menjalankan fungsi tersebut).
Untuk mendapatkan baris sumber yang tepat dari instruksi yang sesuai (umumnya lebih baik daripada firasat), gunakan addr2line
atau metode lain di jawaban lain.
Ini hanya backtrace biasa, fungsi tersebut dipanggil dalam urutan terbalik (yang pertama dipanggil dipanggil oleh yang sebelumnya dan seterusnya):
unwind_backtrace+0x0/0xf8
warn_slowpath_common+0x50/0x60
warn_slowpath_null+0x1c/0x24
ocal_bh_enable_ip+0xa0/0xac
bdi_register+0xec/0x150
bdi_register+0xec/0x150
adalah simbol + offset/panjang ada informasi lebih lanjut tentang itu di Memahami Kernel Ups dan bagaimana Anda dapat men-debug kernel oops. Juga ada tutorial luar biasa tentang Men-debug Kernel
Catatan:seperti yang disarankan di bawah ini oleh Eugene, Anda mungkin ingin mencoba addr2line terlebih dahulu, masih memerlukan gambar dengan simbol debugging, misalnya
addr2line -e vmlinux_with_debug_info 0019594c(+offset)