VSCode有一个扩展叫Native Debug,很方便程序调试,本文讲述如何使用这个扩展,以C/C++为例。

运行环境是Win10,编译器是mingw gcc 9.2.0,需要事先安装好。


一 安装Native Debug

在VSCode的扩展里搜索native,找到Native Debug,然后安装,

vscode如何debug深度学习代码 vscode debug怎么用_c++


二 创建demo工程

先创建一个空文件夹,然后使用VSCode打开这个文件夹。接着使用CMake去创建demo工程,需要先安装CMake,并在VSCode里安装CMake扩展,即红框里的这2个,

vscode如何debug深度学习代码 vscode debug怎么用_json_02


ctrl+shift+p调出命令面板,然后输入cmake,找到Quick Start,然后简单选择下就行了,

vscode如何debug深度学习代码 vscode debug怎么用_vscode_03


最后创建的工程如下,

vscode如何debug深度学习代码 vscode debug怎么用_json_04


因为有了cmake加持,所以按下F7就可以进行自动配置和编译,生成的可执行文件在build目录下,名字为demo.exe

因为要调试,所以要修改一下CMakeLists.txt,如下,加上第7和第8行,这样在编译的时候就可以打开调试开关,

cmake_minimum_required(VERSION 3.0.0)
project(demo VERSION 0.1.0)

include(CTest)
enable_testing()

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g") 

add_executable(demo main.cpp)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

三 调试

1. 基本操作

先切到VSCode的debug窗口,第一次使用Native Debug时,点击红框里的create a launch.json file,

vscode如何debug深度学习代码 vscode debug怎么用_编辑器_05


弹出如下界面,选择GDB

vscode如何debug深度学习代码 vscode debug怎么用_vscode_06


然后就会自动给这个demo工程添加一个launch.json文件,在.vscode目录下,其默认内容如下,

vscode如何debug深度学习代码 vscode debug怎么用_vscode_07


这里只需要修改下target就行了,cwd表示调试时的当前路径,默认是工程的根目录,target改为如下,即生成的可执行文件的路径,

"target": "./build/demo.exe",

然后打开main.cpp,改为如下,

#include <iostream>


void modifyFunc(int *dataPtr)
{
    if (dataPtr != nullptr)
    {
        *dataPtr += 200;
    }
}

int main(int, char**) {
    
    int data = 100;
    
    modifyFunc(&data);

    std::cout << "new data is " << data << "\n";

    return 0;
}

然后按F7重新编译,OK后在第14行打上断点,断点要先打,不然开启debug时就执行运行到最后了。

vscode如何debug深度学习代码 vscode debug怎么用_json_08


PS: 如果想在运行时直接停在程序入口处,那么配置项里加一句,

"stopAtEntry": true

接着点击Debug对应的绿色三角,

vscode如何debug深度学习代码 vscode debug怎么用_json_09


最后界面变成如下,程序停在了断点处,左侧有四个窗口:VARIABLES可以查看当前被执行函数里的局部变量;WATCH窗口可以查看用户添加的变量;CALL STACK就是查看调用栈,也就是当前的函数调用关系;最后是BREAKPOINTS,查看断点

vscode如何debug深度学习代码 vscode debug怎么用_json_10

调试时的单步,continue等就是点击中间的那8个按钮,都是非常方便的,

vscode如何debug深度学习代码 vscode debug怎么用_c++_11

如果对gdb的命令比较熟悉,想在gdb的控制台进行操作,那么就点开下方的DEBUG CONSOLE,最下方的白色大于号就是输入gdb命令的,

vscode如何debug深度学习代码 vscode debug怎么用_json_12


这里输入info b查看一下断点信息,

vscode如何debug深度学习代码 vscode debug怎么用_编辑器_13


如果想在WATCH窗口中观察某个变量,找到并选中这个变量,右击,选择Add to Watch,然后就能在WACH窗口中看到这个变量了,

vscode如何debug深度学习代码 vscode debug怎么用_vscode_14


如下,

vscode如何debug深度学习代码 vscode debug怎么用_c++_15


还有Run to Cursor和Jump to Cursor等快捷选项。

2. 传递命令行参数

有时候程序运行时有命令行参数,那么此时在launch.json里重新添加一个配置,名字叫Debug_args,如下,和之前的配置并列,

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "type": "gdb",
            "request": "launch",
            "target": "./build/demo.exe",
            "cwd": "${workspaceRoot}",
            "valuesFormatting": "parseText"
        },
        {
            "name": "Debug_args",
            "type": "gdb",
            "request": "launch",
            "target": "./build/demo.exe",
            "arguments": "123 456",
            "cwd": "${workspaceRoot}",
            "valuesFormatting": "parseText"
        }
    ]
}

新的配置里加入了"arguments",其值就是需要的命令行参数,由用户自己填写,这样在启动这个调试配置时就会把参数传给程序。

保存launch.json后,在Run and Debug的下拉框里就能看到新加的调试配置了,即Debug_args,

vscode如何debug深度学习代码 vscode debug怎么用_json_16


选中Debug_args,然后点击左侧的绿色三角启动调试,接着程序会停在断点处,此时观察左侧的VARIABLE窗口,在Local下,可以看到argc和argv的值,和设置的一样,

vscode如何debug深度学习代码 vscode debug怎么用_c++_17


三 总结

可以看出Native Debug非常好用,主要是帮我们自动生成launch.json,用户简单改下就可以用了,配合CMake就更上一层楼,当然没有CMake也没问题,只要设置好可执行文件的位置就行了。

在Win和Linux下都可以使用,特别是在Linux下,比传统的gdb,cgdb还有gdb tui都好用多了。支持GDB/LLVM等,本文只介绍了基本的使用方法,还有一些其它功能,如远程调试,可以自行探索。