使用VSCode的Native Debug进行程序调试
温馨提示:这篇文章已超过729天没有更新,请注意相关的内容是否还可用!
VSCode有一个扩展叫Native Debug,很方便程序调试,本文讲述如何使用这个扩展,以C/C++为例。
运行环境是Win10,编译器是mingw gcc 9.2.0,需要事先安装好。
一 安装Native Debug
在VSCode的扩展里搜索native,找到Native Debug,然后安装,
二 创建demo工程
先创建一个空文件夹,然后使用VSCode打开这个文件夹。接着使用CMake去创建demo工程,需要先安装CMake,并在VSCode里安装CMake扩展,即红框里的这2个,
ctrl+shift+p调出命令面板,然后输入cmake,找到Quick Start,然后简单选择下就行了,
最后创建的工程如下,
因为有了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,
弹出如下界面,选择GDB
然后就会自动给这个demo工程添加一个launch.json文件,在.vscode目录下,其默认内容如下,
这里只需要修改下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时就执行运行到最后了。
接着点击Debug对应的绿色三角,
最后界面变成如下,程序停在了断点处,左侧有四个窗口:VARIABLES可以查看当前被执行函数里的局部变量;WATCH窗口可以查看用户添加的变量;CALL STACK就是查看调用栈,也就是当前的函数调用关系;最后是BREAKPOINTS,查看断点
调试时的单步,continue等就是点击中间的那8个按钮,都是非常方便的,
如果对gdb的命令比较熟悉,想在gdb的控制台进行操作,那么就点开下方的DEBUG CONSOLE,最下方的白色大于号就是输入gdb命令的,
这里输入info b查看一下断点信息,
如果想在WATCH窗口中观察某个变量,找到并选中这个变量,右击,选择Add to Watch,然后就能在WACH窗口中看到这个变量了,
如下,
还有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,
选中Debug_args,然后点击左侧的绿色三角启动调试,接着程序会停在断点处,
此时观察左侧的VARIABLE窗口,在Local下,可以看到argc和argv的值,和设置的一样,
三 总结
可以看出Native Debug非常好用,主要是帮我们自动生成launch.json,用户简单改下就可以用了,配合CMake就更上一层楼,当然没有CMake也没问题,只要设置好可执行文件的位置就行了。
在Win和Linux下都可以使用,特别是在Linux下,比传统的gdb,cgdb还有gdb tui都好用多了。支持GDB/LLVM等,本文只介绍了基本的使用方法,还有一些其它功能,如远程调试,可以自行探索。