今天终于成功 debug 了 Linux 内核,允许我一惊一乍给大家分享下喜悦吧!
之前读 Linux 的源码,一直想着如果能 debug 就好了。
无奈 Java 出身的我,本来对 c 就很不熟,跑起一个 c 代码就很费劲了,更别说调试,而且还是调试这种和普通 c 项目不一样的内核代码。
仅仅是出于学习 Linux 内核源码的目的想要调试,所以不想花太多时间研究如何构建这个调试环境,想着在网上找个教程,一次性部署好之后就一直用了,无奈一直没找到能照着文档就搭建成功的。
今天终于找到一个大佬的文档,直接按上面说的就能操作成功,分享给大家,同时我自己也做个备份。
先照着这个文档,使得可以用 gdb 进行调试:
- https://wenfh2020.com/2021/05/19/gdb-kernel-networking/
再按照这个文档,用 vscode 进行更直观地调试(当然也是 gdb 方式):
- https://wenfh2020.com/2021/06/23/vscode-gdb-debug-linux-kernel/
最终效果是。
虚拟机这边用 qemu 启动 Linux 5.0.1 内核。
本机这边用 vscode 的 ssh-remote 插件远程连接虚拟机,然后用 gdb debug。
给大家放大点。
main.c 下的主方法。
看到断点进来相当激动了!这个文档我可得保存好,虚拟机镜像也不敢动了,哈哈,以后就可以开开心心 debug Linux 内核啦。
不过中间也踩了好多坑,原本我想着灵活一点,用自己的 ubuntu 版本,用自己想调试的 Linux 内核版本,无奈都失败了,中间有各种奇奇怪怪的问题...
我就放弃了,乖乖先按照人家的文档跑起来再说吧~
不知道文档里是不是有多余操作,反正各种骚操作我是看不懂,还要改 gdb 的源码。
之后我看看能不能把低版本的 Linux 也搞通,如果大家有更方便地调试方法,可以教教我,这块真是空白。
本文转载自微信公众号「低并发编程」,可以通过以下二维码关注。转载本文请联系低并发编程公众号。