Vscode配置debug

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来配置真正生成可执行程序的过程。