VScode是一款非常好用的代码编辑器,还拥有强大的在线扩展插件。甚至可以进行代码的debug,整理了下配置过程遇到的问题分享出来。 我使用的windows平台vscode版本为V1.56。
通用配置
VS Code内置了对Node.js运行时的调试支持,可以调试JavaScript、TypeScript或JavaScript语言。
要调试其他语言(包括PHP, Ruby, Go, c#, Python, C++, PowerShell等)时,在VS Code扩展中寻找调试器扩展,或者在顶级运行菜单中选择安装额外的调试器。
确定安装可以编译调试的扩展或软件再进行以下步骤:
右击工程文件夹使用VScode打开。
打开需要编译、运行的文件,点击顶部菜单->运行->添加配置…选择需要debug的类型,之后根据语言及即可在 .vscode文件夹下生成launch.json文件。生成的json文件对整个文件夹和子文件夹生效。
举例如何debug go
以go语言为例,路径切换至当前工程文件夹。首先安装调试软件推荐使用dlv,终端中输入
go get -u github.com/go-delve/delve/cmd/dlv
# 未生成mod还得添加mod才能调试
go mod init yourProjectName
一切准备就绪后,点击上述步骤生成launch.json文件,此处会让你选择调试包还是附着到本地进程或远程服务器调试。 选择默认的调试package,这里打开生成的默认json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}"
}
]
}
需要添加新的配置直接点击右下角即可,“name"的值为左标签页调试器的名字用于区分用。
“type”语言类型设置为go,vs code 用于设定调试代码扩展类型。”mode“可以设置为 auto, debug, remote, test, exec 中的一个。
”program“调试程序的路径(绝对路径),这里使用workspaceFolder说明对整个工作区目录文件进行调试。
各配置变量的含义
其中有许多vscode定义的变量,这里列出常用的:
- ${workspaceFolder} - 在VS Code中打开的文件夹路径
- ${workspaceFolderBasename} - 在VS Code中打开的文件夹的名称没有任何斜杠(/)
- ${file} - 当前打开的文件名
- ${fileWorkspaceFolder} - 当前打开的文件的工作区文件夹
- ${relativeFile} - 当前打开的文件名相对于workspaceFolder
- ${relativeFileDirname} - 当前打开的文件的目录名相对于workspaceFolder
- ${fileBasename} - 当前打开的文件的基名
- ${fileBasenameNoExtension} - 当前打开的文件的基名没有文件扩展名
- ${fileDirname} - 当前打开文件的目录名
- ${fileExtname} - 当前打开的文件的扩展名
- ${cwd} - 任务运行器启动时的当前工作目录
- ${lineNumber} - 当前选中的行号在活动文件中
- ${selectedText} - 活动文件中当前选定的文本
- ${execPath} - 运行VS Code可执行文件的路径
- ${defaultBuildTask} - 默认构建任务的名称
- ${pathSeparator} - 操作系统用于分隔文件路径中的组件的字符
- ${pathSeparator} - 在macOS或linux系统为/, 在Windows上为\
关于debug C/C++
该文件设置debug的各项配置根据语言的不同,设置也不尽相同。这里介绍c/c++的具体配置流程。
总结各文件作用
与其他语言类似的,debug的配置文件也是生成在.vscode文件夹中。 c/c++程序配置一般有三个文件:
- tasks.json(如何编译生成可执行程序)
- launch.json(调试设置)
- c_cpp_properties.json(编译器路径和vscode感知设置) 其中c_cpp_properties非常坑,由于我使用了自己写的头文件在c_cpp_properties.json的includePath项目配置各种路径类型都不生效,后面才看懂这个只是让vscode识别头文件该跳转的路径而已,真正要添加外部库或头文件的话要么放在系统默认库、头文件路径,要么在task.json中配置生成。
具体流程
c/c++代码需要先编译链接生成可执行程序(tasks.json),再使用gdb调试(launch.json),c_cpp_properties.json设置c/c++使用语言标准例如c++11等。注意:调试前确保系统环境已配置g++、gdb。验证方法:
要检查您的 Mingw-w64 工具是否正确安装和可用,请打开新的命令提示并键入: g++ –version gdb –version 以此工程文件夹为例,main函数调用了lib文件夹下的stu_rw.h文件
打开main.cpp文件,点击顶部菜单->终端->配置默认生成任务,选择使用g++生成活动文件。打开生成的task.json文件
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"-Wall", //显示全部详细警告
"-std=c++11", //支持C11
"${file}",
"-I",
"${workspaceFolder}\\lib",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: \"C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe\""
}
]
}
其中args选项即为g++编译链接选项,如上所示我已经添加了”-I"相关参数添加头文件路径,c11标准。静态库链接等就放-o选项后,除最后一行配置文件每行都得加逗号。
之后打开main.cpp点击顶部菜单->终端->运行生成任务,看是否生成成功。
之后设定debug选项,点击顶部菜单->运行->添加配置,选择gdb、之后选g++生成默认配置。 下面展示配置的说明:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg",
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe 生成活动文件"
}
]
}
如果您想要对 C/C++扩展进行更多控制,c_cpp_properties.json将配置如编译器的路径,include路径、C++标准(默认值为 C++17)等等。
通过命令终端(Ctrl+Shift+P)输入>c/c++,有两个选项一个是直接配置json一个是通过UI界面配置。
这里的C/C++ 配置UI页面,基本保持默认即可。注意这里的配置编辑器是给vscode和扩展使用的,不影响task.json来配置真正生成可执行程序的过程。