调试linux内核的工具是什么?

时间:2013-04-17 05:24:51

标签: linux linux-kernel linux-device-driver boot bootloader

我是linux内核的新手。 徘徊如何浏览完整的流程,从CPU的上电。 关于BIOS / ROM代码的基本思路。

我可以使用一些工具来调试整个内核吗? 要么 原始代码浏览更可取?

4 个答案:

答案 0 :(得分:2)

首先,请参阅相关问题Linux kernel live debugging, how it's done and what tools are used?。尝试使用KDBFtrace

答案 1 :(得分:2)

如果您的目的是了解Linux内核的整个流程,那么在QEMU上运行Linux内核可以很容易地了解Linux的工作原理。 ESP。您可以模拟许多CPU类型而无需真正的H / W.或user mode Linux怎么样?

This document可以帮助调试QEMU上的内核。

答案 2 :(得分:2)

以下工具可以帮助您调试Linux内核

Dynamic Probes是由IBM开发的流行的Linux调试工具之一。此工具允许在用户和内核空间中的系统中的几乎任何位置放置“探针”。探针由一些代码(用专门的,面向堆栈的语言编写)组成,当控制命中给定点时执行。关于下面列出的dprobes / kprobes 的资源

Linux Trace Toolkit是一个内核补丁和一组相关的实用程序,允许跟踪内核中的事件。该跟踪包括定时信息,并且可以创建在给定时间段内发生的事情的相当完整的图像。 LTT,LTT Viewer和LTT Next Generation的资源

MEMWATCH是一个开源内存错误检测工具。它的工作原理是在gcc语句中定义MEMWATCH,并在代码中添加头文件。通过这个,我们可以跟踪内存泄漏和内存损坏。有关MEMWATCH的资源

ftrace是一个很好的Linux内核跟踪框架。 ftrace跟踪内核的内部操作。该工具包含在2.6.27的Linux内核中。通过其各种跟踪器插件,ftrace可以针对不同的静态跟踪点,例如调度事件,中断,内存映射I / O,CPU电源状态转换以及与文件系统和虚拟化相关的操作。此外,可以使用动态跟踪内核函数调用,可选地通过使用glob限制函数子集,并且可以生成调用图并提供堆栈使用。你可以在https://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_rostedt.pdf

找到一个很好的ftrace教程

ltrace是Linux中的一个调试实用程序,用于显示用户空间应用程序对共享库的调用。此工具可用于跟踪任何动态库函数调用。它拦截并记录由执行过程调用的动态库调用以及该进程接收的信号。它还可以拦截和打印程序执行的系统调用。

KDB 是Linux内核的内核调试器。 KDB遵循简单的shell风格接口。我们可以用它来检查内存,寄存器,进程列表,dmesg,甚至设置断点以在某个位置停止。通过KDB,我们可以设置断点并执行一些基本的内核运行控制(虽然KDB不是源代码级调试器)。关于KDB的几个方便的资源

KGDB 旨在用作Linux内核的源代码级调试器。它与gdb一起用于调试Linux内核。使用kgdb需要两台机器。其中一台机器是开发机器,另一台是目标机器。要调试的内核在目标计算机上运行。期望是gdb可以用来打破"打破"内核检查内存,变量和查看调用堆栈信息,类似于应用程序开发人员使用gdb调试应用程序的方式。可以在内核代码中放置断点并执行一些有限的执行步进。关于KGDB的几个方便的资源

答案 3 :(得分:0)

刚添加,Linux内核不太适合调试。 Linus Torvalds曾经声称他在Linux中支持内核调试,因为它会导致编写错误的代码。 我使用了kdbg,但是我觉得它没有用,我建议用oldkchool方式调试内核,使用printk。