linux - 他们如何调试 Linux Kernel Core

标签 linux debugging linux-kernel

现在调试变得如此先进,甚至可以使用虚拟环境调试“核心内核源代码”。

但在阅读了一些与 Kernel Core 开发相关的博客后,并不清楚他们是否使用虚拟环境进行调试。

他们提到他们依赖“打印消息”而不是使用调试工具,至少对于核心组件而言。

那么,我请求“Linux 内核专家”让我知道调试内核时遵循的良好做法是什么?

最佳答案

我尝试调试内核时尝试了多种方法。

  1. 有时,最简单的方法是根据我自己的条件值添加一些printk 语句,监视串行日志并查看发生了什么。当经常调用相关函数但您只对其中的一个子集感兴趣时,它特别有用。
  2. QEMU GDB 调试。我有一个 buildroot 文件系统设置。这意味着内核是精简的,并且启动速度非常快。我使用 -s -S 标志启动 qemu,并将 gdb 附加为 target remote :1234。此外,此设置中没有太多用户空间进程,因此更容易调试内核。
  3. VMWare stub 。假设您正在运行 Ubuntu VM,您可以将 gdb 附加到 VMware stub 并调试内核。就我个人而言,我从来不必走这条路,但我期待有一天能尝试一下。
  4. 如果您的设备内核卡在引导循环中,并且没有将任何调试信息输出到串口,那么尝试使用 QEMU 启动它可能仍然会有帮助。当然,启动可能会失败,因为内核会尝试加载驱动程序,但您应该能够附加 gdb,获取堆栈跟踪并查看根本原因是什么(可能是递归调用)。

关于linux - 他们如何调试 Linux Kernel Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46913831/

相关文章:

c - 读取() : Unable to read file for/proc/$pid/status

linux - Ubuntu 3G 调制解调器华为 E1550 上的 Wammu 配置

Linux 将多个文本文件写入一个 PostScript 文件

c++ - atexit() 函数

linux - 检查程序是否已死亡

linux - lib32-ncurses 没有安装到 rootfs

c# - 调试在 64 位环境中运行的 32 位应用程序

c - 在 C 中调试使用套接字的程序时出现问题 : connect

performance - 我看不到用于测量功耗的 perf 的 power/energy-cores 选项

内核版本