内核调试和应用程序调试,底层都是使用 gdb,只不过受限于环境、系统等因素,使用了不同的辅助程序(设备)罢了。
内核调试的两种方法:OpenOCD + JTAG、qemu
应用程序调试的两种方法:gdb、gdbserver
OpenOCD 详见《OpenOCD 通过 JTAG 调试树莓派》这篇文章。
qemu 使用 -s 就相当于在 localhost:1234
端口上启动一个 gdbserver,等待 gdb 连接。
左侧窗口启动 qemu,配合 -s 参数启动 gdbserver。右侧窗口启动 gdb,连接 gdbserver,调试内核。
进阶:
使用 vscode 进行调试更为方便
内核源码目录下,.vscode 目录中,创建 launch.json 文件,内容为
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "启动 gdb",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/vmlinux",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/home/liyongjun/project/board/buildroot/Vexpress_2/host/bin/arm-linux-gdb",
"miDebuggerServerAddress": "127.0.0.1:1234",
"targetArchitecture": "ARM",
"stopAtConnect": true,
}
]
}
vscode 点击 【启动 gdb】,代码停止在 0x60000000 处,接着就可以使用 vscode 进行单步、打断点等调试。