什么是最常见的以及为什么不常用的方法和工具不在 Linux 内核上进行实时调试?
我知道 Linus ,例如 is against这种针对 Linux 内核的调试,或者至少是,因此在那些年里,在这个意义上并没有做太多的事情,但老实说,自 2000 年以来已经过去了很多时间,我很感兴趣这种心态是否已经改变,关于 Linux 项目和目前使用哪些方法在 Linux 内核上进行实时调试(本地或远程)?
欢迎引用有关上述技术和工具的演练和教程。
最佳答案
另一种选择是使用 ICE或 JTAG Controller 和 GDB。这种“硬件”解决方案特别适用于嵌入式系统。
但是例如 QEMU提供类似的功能:
使用 GDB 'remote' stub 启动 QEMU,该 stub 在 'localhost:1234' 上监听:
qemu -s ...
,然后使用 GDB,您打开使用调试信息编译的内核文件
vmlinux
(您可以查看 this mailing list thread,他们讨论了内核的未优化)。连接 GDB 和 QEMU:
target remote localhost:1234
查看你的 live 内核:
(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
不幸的是,到目前为止,使用 GDB 无法进行用户空间调试(没有任务列表信息,没有 memory management unit 重新编程以查看不同的进程上下文,...),但是如果您留在内核空间,那将非常方便.
info threads
将为您提供不同 CPU 的列表和状态
您可以在此 PDF 中获得有关该过程的更多详细信息:
关于debugging - Linux内核实时调试是如何完成的,使用了哪些工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4943857/