Diberikan jejak tumpukan kernel seperti di bawah ini, bagaimana Anda menentukan baris kode tertentu di mana masalah terjadi?
kernel: [<ffffffff80009a14>] __link_path_walk+0x173/0xfb9
kernel: [<ffffffff8002cbec>] mntput_no_expire+0x19/0x89
kernel: [<ffffffff8000eb94>] link_path_walk+0xa6/0xb2
kernel: [<ffffffff80063c4f>] __mutex_lock_slowpath+0x60/0x9b
kernel: [<ffffffff800238de>] __path_lookup_intent_open+0x56/0x97
kernel: [<ffffffff80063c99>] .text.lock.mutex+0xf/0x14
kernel: [<ffffffff8001b222>] open_namei+0xea/0x712
kernel: [<ffffffff8006723e>] do_page_fault+0x4fe/0x874
kernel: [<ffffffff80027660>] do_filp_open+0x1c/0x38
kernel: [<ffffffff8001a061>] do_sys_open+0x44/0xbe
kernel: [<ffffffff8005d28d>] tracesys+0xd5/0xe0
Meskipun saya tidak kesulitan menemukan pemanggilan fungsi - tetapi menerjemahkan __link_path_walk plus offset ke nomor baris aktual adalah bagian yang sulit.
Dengan asumsi ini adalah kernel standar yang disediakan distribusi yang saya tahu versi yang tepat dan nomor build, apa proses untuk mengambil metadata yang diperlukan dan melakukan pencarian yang sesuai?
CONFIG_KALLSYMS
: github.com/cirosantilli/linux-kernel-module-cheat/tree/…Saya tidak punya ~ = RHEL5 di tangan, jadi output yang ditampilkan adalah dari Fedora 20, meskipun prosesnya sebagian besar sama ( nama fungsi telah berubah ).
Anda perlu menginstal
kernel-debug-debuginfo
paket yang sesuai untuk kernel Anda (dengan asumsi RHEL atau turunan distro). Paket ini memberikanvmlinux
gambar (versi kernel yang tidak dikompresi tidak dilucuti):gambar yang dapat digunakan secara langsung dengan
gdb
Anda juga dapat menggunakan
objdump(1)
padavmlinux
gambar:Bendera adalah:
Anda dapat mencari fungsi di sana:
dan cocokkan offset ke baris kode yang sebenarnya.
sumber
Jadikan output stack stack berguna lagi.
sumber
Jika addr2line harus mencetak tanda tanya untuk nomor baris atau objdump gagal inline kode sumber dan Anda memiliki kernel khusus, pastikan untuk mengkompilasi ulang kernel dengan set CONFIG_DEBUG_INFO. Anda mungkin perlu mereproduksi kesalahan dengan kernel yang baru saja dibangun.
sumber