素材巴巴 > 程序开发 >

使用VSCode的Native Debug进行程序调试

程序开发 2023-09-18 07:14:45

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 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时就执行运行到最后了。
在这里插入图片描述
PS: 如果想在运行时直接停在程序入口处,那么配置项里加一句,

"stopAtEntry": true
 

接着点击Debug对应的绿色三角,
在这里插入图片描述
最后界面变成如下,程序停在了断点处,左侧有四个窗口:VARIABLES可以查看当前被执行函数里的局部变量;WATCH窗口可以查看用户添加的变量;CALL STACK就是查看调用栈,也就是当前的函数调用关系;最后是BREAKPOINTS,查看断点
在这里插入图片描述

调试时的单步,continue等就是点击中间的那8个按钮,都是非常方便的,
![在这里插入图片描述](https://img-blog.csdnimg.cn/5c2183a336a34ff89bf497c887ef0940.png

如果对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等,本文只介绍了基本的使用方法,还有一些其它功能,如远程调试,可以自行探索。


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。