在很多情况下,需要对应用程序进行调试。在 Linux 下调试程序,常用的工具是 gdb。 由于嵌入式单板的资源有限,一般不直接在目标机上运行 gdb 进行调试,而是采取 gdb+gdbserver 的方式。gdbserver 在目标机中运行,gdb 则在宿主机上运行,这样来达到调试程序的目的,前提是目标板需要和主机连通网络。
第一步是在目标板安装gdbserver服务,如果已经有了,可以跳过。
解压下载好的gdb包,进入,然后在/gdb/gdbserver里打开终端,输入
./configure –target=arm-hisiv200-linux –host=arm-hisiv200-linux
不同的arm有不同的交叉编译器,我使用的是海思芯片,所以写海思的交叉编译器的前缀,你用的什么交叉编译器就写什么前缀
然后
make CC=/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gcc
这里CC后面跟的是你交叉编译器的路径,不知道在哪里的,可以在终端使用
type arm-hisiv200-linux-gcc 查看路径
然后在目标板上使用下面这条命令
gdbserver :2000 hello [param] & 2000表示gdb用访问目标板的2000端口调试程序 hello表示你要调试的程序名 [param]如果要带参数,写在这里,如果不用带参数,就不用写这条
如果一切正确,应该显示
#gdbserver :2000 hello & #Process hello created; pid = 126 #Listening on port 2000
这时候目标板这边就准备好了,只需要配置vscode这边就行了。
打开vscode的调试配置json,参考我的修改一下
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) 启动", "type": "cppdbg", "request": "launch", "program": "/home/nfs/testApp", // 这个写在主机这边的程序位置 "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "miDebuggerPath": "/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin/arm-hisiv200-linux-gdb", // 这个是交叉编译器的路径 "miDebuggerServerAddress": "172.16.0.203:2000", // 这个是目标板的IP地址 } ] }
然后按左上角的小箭头,就可以开始调试目标板上的程序啦,调试方式和电脑上一样