怎样使用qemu+kgdb调试linux系统
利用qemu+kgdb调试Linux系统
author:Ewan
- 在Guest上编译并安装需要debug的内核,需要将以下选项加入编译配置中。
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_INFO=y
CONFIG_CONSOLE_POLL=y
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
CONFIG_KDB_DEFAULT_ENABLE=0x1
CONFIG_KDB_KEYBOARD=y
CONFIG_KGDB=y
CONFIG_KGDB_KDB=y
CONFIG_KGDB_LOW_LEVEL_TRAP=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_TESTS=y
CONFIG_KGDB_TESTS_ON_BOOT=n
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_SERIAL_KGDB_NMI=n
注意:
理论上也可以通过在Host上编译内核(因为Guest上的编译实在是太慢了),然后将整个源码目录拷贝到Guest中去,再进行安装。但是经过实验,这样操作会导致新编译的内核无法启动,不知道哪里出了问题。
以上选项加入编译配置肯定没有问题,但我在5.3.8的编译中,使用默认选项(5.3.8默认使能了KGDB),也能最终使用KGDB编译该内核。
- 将Guest中的内核源码目录传输到Host上,因为之后gdb要从该目录启动,使用该目录的vmlinux,我使用的传输媒介为网桥,需要配置网桥,配置网桥方案见文档"qemu使用网桥模式"。
- 利用qemu启动Guest
- 在Guest的启动选项中,选择Advanced Options,然后在需要debug的kernel版本上按e,编辑该内核的启动项,加入:
然后按F10, 启动该内核。
- 在Host上,之前从Guest传输过来的内核源码目录下,启动gdb
然后在gdb中,输入c,并回车
- 在Guest中,输入
然后就会发现Guest卡住了,回到Host看gdb所在的terminal,发现gdb可以操作了,之后就可以使用该gdb对内核进行debug了。
__EOF__

本文作者:EwanHai
本文链接:https://www.cnblogs.com/haiyonghao/p/14440777.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/haiyonghao/p/14440777.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律