借用网上一张图,原文参考:https://blog.csdn.net/qq_40833810/article/details/106713462
我们在进行GDB调试时,先打开GDB Server,通过tcp监听端口2331,等待进行连接并调试。
简单,官方下载安装即可。
官网下载并安装https://www.segger.com/downloads/jlink/
本文主要讲的是vscode在线调试,并未包含固件编译和下载,所以提前准备好固件并少如目标板中。
使用的固件是*.elf文件,即生成的可执行文件。
通过安装jlink时安装的JLinkGDBServer来打开GDB Server,有两种打开方法,如本人使用的是Atmel的SAMV71Q21
打开方法一:
通过安装目录找到 JLinkGDBServer.exe,双击即可打开,如图:
选择目标板(target device)、连接方式(Target interface),速度自行设定,其他保持默认,确认(OK)即可,然后进入下图:
图中所示:J-Link已连接,GDB Server Listening port: 2331,TCP端口是2331处于监听状态,等待GDB的TCP连接。
打开方法二:
命令行打开,需将 JLinkGDBServer.exe的路径保存到环境变量中,windows和linux都适合,然后输入命令:
JLinkGDBServer -device ATSAMV71Q21 -if SWD -speed 500
-device后跟着的目标板需根据实际的需求进行更换,-speed可自己设置自己需要的速度,如下图为打开的界面(linux下没有界面,会显示等待连接状态):
至此,GDB Server已打开,tcp端口2331处于监听状态,下一步是要通过GDB进行连接GDB Server。
通过vscode打开工程的根目录,添加gdb设置文件 lanuch.json(很重要),通过vscode的菜单栏,运行->添加配置,则生成如下图文件
然后,选择下图中的添加配置,添加红色圈中的内容,
选择完毕之后,则内容如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "输入程序名称,例如 ${workspaceFolder}/a.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/path/to/gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
主要需要更改3处内容
1、更改可执行文件路径,即 “program”选项处,将此处内容更改为原工程生成的固件路径,注意在windows环境中,路径需使用 /或者 \\,如本人使用的路径:
//"program": "E:/exsample/test.elf",
"program": "E:\\exsample\\test.elf",
2、更改gdb所在路径,即 “miDebuggerPath”选项处,选择编译固件时使用的gcc路径下得gdb文件,如本人使用的是:
//"miDebuggerPath": "D:\\Program Files\\Atmel\\Studio\\7.0\\toolchain\\arm\\arm-gnu-toolchain\\bin\\arm-none-eabi-gdb.exe",
"miDebuggerPath": "D:/Program Files/Atmel/Studio/7.0/toolchain/arm/arm-gnu-toolchain/bin/arm-none-eabi-gdb.exe",
3、添加GDB的tcp连接端口,使用本地端口localhost
"miDebuggerServerAddress": "localhost:2331"
更改后的文件如下,此文件也可以之间拷贝到其他项目目录下,修改对应的可执行文件和gdb文件路径即可:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
//"program": "E:/exsample/test.elf",
"program": "E:\\exsample\\test.elf",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
//"miDebuggerPath": "D:\\Program Files\\Atmel\\Studio\\7.0\\toolchain\\arm\\arm-gnu-toolchain\\bin\\arm-none-eabi-gdb.exe",
"miDebuggerPath": "D:/Program Files/Atmel/Studio/7.0/toolchain/arm/arm-gnu-toolchain/bin/arm-none-eabi-gdb.exe",
"miDebuggerServerAddress": "localhost:2331"
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
至此,vscode配置GDB环境完毕,下一步进入真正的调试过程。
点击vscode菜单栏的运行->启动调试,或者选择下图亦可启动调试:
调试界面如下:
1.可以进行单步调试、打断点等;
2.可以查看当前变量值
3.可以在监听窗口添加想要查看的变量或者寄存器等;
上述步骤即可实现vscode+jlink+GDBServer的在线调试功能,当然也存在一些问题,目前还未找到原因,如每次进入调试都需重新启动GDB Server,然后再使用vscode进入调试模式,否则可能会进入调试失败。