之前在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、最后是调试的界面
调试界面分了好几个界面,变量这个组件可以查看当前调试流程中各种变量,监视组件可以配置监视条件,调用堆栈组件显示当前的堆栈信息,具体的内容还没有细做研究,调试的功能还是比较全面的,等研究之后可能会再记录一下。