Pilihan lainnya adalah menggunakan pengontrol ICE/JTAG, dan GDB. Solusi 'perangkat keras' ini terutama digunakan dengan sistem tersemat,
tetapi misalnya Qemu menawarkan fitur serupa:
-
mulai qemu dengan stub 'remote' gdb yang mendengarkan 'localhost:1234' :
qemu -s ...
, -
kemudian dengan GDB Anda membuka file kernel
vmlinux
dikompilasi dengan informasi debug (Anda dapat melihat utas milis ini di mana mereka membahas unoptimasi kernel). -
menghubungkan GDB dan Qemu:
target remote localhost:1234
-
lihat live Anda inti:
(gdb) where #0 cpu_v7_do_idle () at arch/arm/mm/proc-v7.S:77 #1 0xc0029728 in arch_idle () atarm/mach-realview/include/mach/system.h:36 #2 default_idle () at arm/kernel/process.c:166 #3 0xc00298a8 in cpu_idle () at arch/arm/kernel/process.c:199 #4 0xc00089c0 in start_kernel () at init/main.c:713
sayangnya, debugging ruang pengguna sejauh ini tidak dimungkinkan dengan GDB (tidak ada informasi daftar tugas, tidak ada pemrograman ulang MMU untuk melihat konteks proses yang berbeda, ...), tetapi jika Anda tetap berada di ruang kernel, itu cukup nyaman.
info threads
akan memberi Anda daftar dan status CPU yang berbeda
EDIT:
Anda bisa mendapatkan rincian lebih lanjut tentang prosedur dalam PDF ini:
Men-debug sistem Linux menggunakan GDB dan QEMU.
Saat men-debug kernel Linux, kita dapat menggunakan beberapa alat, misalnya, debugger (KDB, KGDB), dumping while crash (LKCD), tracing toolkit (LTT, LTTV, LTTng), instrumen kernel khusus (dprobes, kprobes). Di bagian berikut saya mencoba meringkas sebagian besar dari mereka, semoga ini bisa membantu.
LKCD Alat (Linux Kernel Crash Dump) memungkinkan sistem Linux untuk menulis isi memorinya saat terjadi kerusakan. Log ini dapat dianalisis lebih lanjut untuk akar penyebab crash. Referensi terkait LKCD
- http://www-01.ibm.com/support/knowledgecenter/linuxonibm/liaax/lkcd.pdf
- https://www.novell.com/coolsolutions/feature/15284.html
- https://www.novell.com/support/kb/doc.php?id=3044267
Ups ketika kernel mendeteksi masalah, ia mencetak pesan Ups. Pesan seperti itu dihasilkan oleh pernyataan printk di penangan kesalahan (arch/*/kernel/traps.c). Buffer cincin khusus di kernel yang digunakan oleh pernyataan printk. Oops berisi informasi seperti, CPU tempat terjadinya Oops, isi register CPU, jumlah Oops, deskripsi, stack back trace, dan lain-lain. Sumber daya tentang kernel Ups
- https://www.kernel.org/doc/Documentation/oops-tracing.txt
- http://madwifi-project.org/wiki/DevDocs/KernelOops
- https://wiki.ubuntu.com/DebuggingKernelOops
Probe Dinamis adalah salah satu alat debugging populer untuk Linux yang dikembangkan oleh IBM. Alat ini memungkinkan penempatan "penyelidikan" di hampir semua tempat di sistem, baik di ruang pengguna maupun kernel. Probe terdiri dari beberapa kode (ditulis dalam bahasa khusus yang berorientasi tumpukan) yang dijalankan saat kontrol mencapai titik tertentu. Sumber daya terkait Pemeriksaan Dinamis tercantum di bawah
- http://www-01.ibm.com/support/knowledgecenter/linuxonibm/liaax/dprobesltt.pdf
- http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.107.6212&rep=rep1&type=pdf
Linux Trace Toolkit adalah tambalan kernel dan sekumpulan utilitas terkait yang memungkinkan pelacakan peristiwa di kernel. Jejak mencakup informasi waktu dan dapat membuat gambaran yang cukup lengkap tentang apa yang terjadi selama periode waktu tertentu. Resource LTT, LTT Viewer, dan LTT Next Generation
- http://elinux.org/Linux_Trace_Toolkit
- http://www.linuxjournal.com/article/3829
- http://multivax.blogspot.com/2010/11/introduction-to-linux-tracing-toolkit.html
MEMWATCH adalah alat pendeteksi kesalahan memori open source. Ia bekerja dengan mendefinisikan MEMWATCH dalam pernyataan gcc dan dengan menambahkan file header ke kode kita. Melalui ini kita dapat melacak kebocoran memori dan kerusakan memori. Referensi terkait MEMWATCH
- http://www.linuxjournal.com/article/6059
ftrace adalah kerangka penelusuran yang bagus untuk kernel Linux. ftrace melacak operasi internal kernel. Alat ini termasuk dalam kernel Linux di 2.6.27. Dengan berbagai plugin pelacaknya, ftrace dapat ditargetkan pada titik pelacakan statis yang berbeda, seperti peristiwa penjadwalan, interupsi, I/O yang dipetakan memori, transisi status daya CPU, dan operasi yang terkait dengan sistem file dan virtualisasi. Juga, pelacakan dinamis panggilan fungsi kernel tersedia, secara opsional dapat dibatasi ke subset fungsi dengan menggunakan glob, dan dengan kemungkinan untuk menghasilkan grafik panggilan dan menyediakan penggunaan tumpukan. Anda dapat menemukan tutorial ftrace yang bagus di https://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_rostedt.pdf
ltrace adalah utilitas debug di Linux, digunakan untuk menampilkan panggilan yang dilakukan aplikasi ruang pengguna ke pustaka bersama. Alat ini dapat digunakan untuk melacak panggilan fungsi perpustakaan dinamis apa pun. Itu memotong dan merekam panggilan perpustakaan dinamis yang dipanggil oleh proses yang dieksekusi dan sinyal yang diterima oleh proses itu. Itu juga dapat mencegat dan mencetak panggilan sistem yang dijalankan oleh program.
- http://www.ellexus.com/getting-started-with-ltrace-how-does-it-do-that/?doing_wp_cron=1425295977.1327838897705078125000
- http://developerblog.redhat.com/2014/07/10/ltrace-for-rhel-6-and-7/
KDB adalah debugger dalam kernel dari kernel Linux. KDB mengikuti antarmuka gaya shell yang sederhana. Kita dapat menggunakannya untuk memeriksa memori, register, daftar proses, dmesg, dan bahkan menyetel breakpoint untuk berhenti di lokasi tertentu. Melalui KDB kita dapat mengatur breakpoint dan menjalankan beberapa kontrol dasar kernel run (Meskipun KDB bukan debugger tingkat sumber ). Beberapa sumber berguna tentang KDB
- http://www.drdobbs.com/open-source/linux-kernel-debugging/184406318
- http://elinux.org/KDB
- http://dev.man-online.org/man1/kdb/
- https://www.kernel.org/pub/linux/kernel/people/jwessel/kdb/usingKDB.html
KGDB dimaksudkan untuk digunakan sebagai debugger tingkat sumber untuk kernel Linux. Ini digunakan bersama dengan gdb untuk men-debug kernel Linux. Diperlukan dua mesin untuk menggunakan kgdb. Salah satu mesin ini adalah mesin pengembangan dan yang lainnya adalah mesin target. Kernel yang akan di-debug dijalankan pada mesin target. Harapannya adalah bahwa gdb dapat digunakan untuk "membobol" kernel untuk memeriksa memori, variabel, dan melihat melalui informasi tumpukan panggilan yang mirip dengan cara pengembang aplikasi menggunakan gdb untuk men-debug aplikasi. Dimungkinkan untuk menempatkan breakpoint dalam kode kernel dan melakukan beberapa langkah eksekusi terbatas. Beberapa sumber berguna tentang KGDB
- http://landley.net/kdocs/Documentation/DocBook/xhtml-nochunks/kgdb.html
Menurut wiki, kgdb
digabungkan ke dalam kernel di 2.6.26
yang dalam beberapa tahun terakhir. kgdb
adalah debugger jarak jauh, jadi Anda mengaktifkannya di kernel lalu Anda memasang gdb ke dalamnya. Saya katakan entah bagaimana karena tampaknya ada banyak opsi - lihat menghubungkan gdb. Mengingat bahwa kgdb
sekarang ada di pohon sumber, menurut saya ke depan inilah yang ingin Anda gunakan.
Jadi sepertinya Linus menyerah. Namun, saya akan menekankan argumennya - Anda harus tahu apa yang Anda lakukan dan mengetahui sistemnya dengan baik. Ini adalah tanah kernel. Jika terjadi kesalahan, Anda tidak mendapatkan segfault
, Anda mendapatkan apa saja dari beberapa masalah yang tidak jelas di kemudian hari hingga seluruh sistem turun. Di sini jadilah naga. Lanjutkan dengan hati-hati, Anda telah diperingatkan.