之前在linux环境下调试基本使用的都是gdb调试,gdb调试确实挺强大的,但相交windows环境下vs等IDE而言确实不是很方便,之前了解了一个vscode的工具,这个工具是一个轻量级的IDE,可以远程调试linux环境下的程序,可视性以及可用性大大提高了,不需要记gdb命令也可用调试了。现在很多程序都使用makefile进行程序编译,本文根据实际需求,结合nxlog源码来进行vscode linux环境的gdb远程调试环境搭建。
本文需要准备vscode远程调试环境,windows 本地安装vscode,配置远程连接linux环境,这些操作主要是安装一些插件以及互信配置,这里就不做介绍了。
确保远程连接成功后开始配置远程gdb调试功能,主要是配置tasks.json以及launch.json文件。
1、首先确保可以远程连接到linux环境:
2、创建launch.json文件
选择c++(GDB/LLDB)
使用:默认配置
这样会在.vscode目录下生成launch.json文件,如下为默认生成的模板,默认的选项字段可以通过鼠标悬停的方式来查看属性的描述,这里我简单做了一些注释。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动", //配置名称,显示在配置下拉菜单中
"type": "cppdbg", //配置类型
"request": "launch", //请求配置类型,可以是启动或者是附加
"program": "输入程序名称,例如 ${workspaceFolder}/a.exe", //程序可执行文件的完整路径,${workspaceFolder}表示远程连接的初始路径
"args": [], //传递给程序的命令行参数
"stopAtEntry": false,//可选参数,如果为true,调试程序应该在入口(main)处停止
"cwd": "${workspaceFolder}", //目标的工作目录
"environment": [], //表示要预设的环境变量
"externalConsole": false,//如果为true,则为调试对象启动控制台
"MIMode": "gdb",//要连接到的控制台启动程序
"setupCommands": [ //为了安装基础调试程序而执行的一个或多个GDB/LLDB命令
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
3.修改launch.json文件
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/src/core/nxlog",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build-debug"
}
]
}
这里新增了一个preLaunchTask字段,表示开始调试任务之前要执行的task,我们这里设置要执行的任务为build-debug,我们这里希望此任务是通过make命令生成可执行程序。
4、接下来我们生成build-debug 这个task
ctrl + shift + p
输入Tasks选择任务:配置任务
使用模板生成tasks.json
这样会在.vscode目录下生成一个默认的tasks.json文件
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}
5、修改tasks.json文件
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build-debug",
"command": "make",
"args": [""],
"type": "shell"
},
{
"label": "clean",
"command": "make",
"args": ["clean"],
"type": "shell"
}
]
}
这里我们配置了两个label,其中包括了我们之前提到的build-debug task。
6、开始调试
配置这样就完成了,接下来我们打好断点后(打断点就不介绍了),开始F5进行调试,首先会根据tasks.json文件中的配置进行make执行,生成所需的nxlog文件,接着正式进入调试流程,会在第一个断点处阻塞。
下面是一些调试的键位:
F5 开始调试
F10 单步跳过
F11 单步调试
shift + F11 单步跳出
ctrl + shift + F5 重启调试
shift + F5 停止调试
7、最后是调试的界面
调试界面分了好几个界面,变量这个组件可以查看当前调试流程中各种变量,监视组件可以配置监视条件,调用堆栈组件显示当前的堆栈信息,具体的内容还没有细做研究,调试的功能还是比较全面的,等研究之后可能会再记录一下。