vscode 远程linux环境结合makefile 进行gdb调试

之前在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环境:

vscode 远程linux环境结合makefile 进行gdb调试

2、创建launch.json文件

vscode 远程linux环境结合makefile 进行gdb调试

选择c++(GDB/LLDB)

vscode 远程linux环境结合makefile 进行gdb调试

 使用:默认配置

vscode 远程linux环境结合makefile 进行gdb调试

 这样会在.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选择任务:配置任务

 vscode 远程linux环境结合makefile 进行gdb调试

 使用模板生成tasks.json

vscode 远程linux环境结合makefile 进行gdb调试

vscode 远程linux环境结合makefile 进行gdb调试 这样会在.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、最后是调试的界面

vscode 远程linux环境结合makefile 进行gdb调试

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

上一篇:make


下一篇:CMake入门资料