You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GDB -tui调试Qemu中Linux内核时源码不可用的解决咨询

解决GDB TUI调试Linux内核时“Source Not Available”问题

以下是几个排查和解决的步骤:

  • 确认内核编译时保留了完整调试信息
    编译内核必须开启调试信息相关配置,否则vmlinux里没有对应源码的符号表:

    1. 检查内核.config文件:执行grep CONFIG_DEBUG_INFO .config,确保输出包含CONFIG_DEBUG_INFO=y,建议额外开启CONFIG_DEBUG_INFO_DWARF5=y(更高版本的DWARF格式能提升调试兼容性)。
    2. 如果配置未开启,运行make menuconfig进入配置界面,在Kernel hacking -> Compile-time checks and compiler options下找到对应选项开启,之后重新执行make -j$(nproc)编译内核。
  • 明确指定GDB的源码搜索路径
    即使在源码目录启动GDB,仍可能存在路径匹配问题,需手动指定源码路径:

    1. 在GDB交互界面执行directory /绝对路径/到/你的/linux源码目录,比如directory ~/linux-5.15。
    2. 也可以把路径指定加入启动命令,修改为:
      gdb -tui -ex 'file vmlinux' -ex 'directory /绝对路径/到/你的/linux源码目录' -ex 'target remote localhost:1234'
      
  • 触发断点后手动加载源码
    当断点命中(比如start_kernel)后,若TUI窗口仍未显示源码:

    1. 在GDB里执行list start_kernel,强制加载对应源码文件。
    2. 按Ctrl+X+A切换TUI开关,或者执行layout src强制切换到源码窗口。
  • 验证vmlinux的调试符号完整性
    执行readelf -S vmlinux | grep debug,若输出中没有.debug_info、.debug_line等以.debug开头的段,说明编译时未生成调试符号,需要重新编译内核。

内容的提问来源于stack exchange,提问作者evstack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:57:02