mac vscode配置c++ debug环境

本文介绍了在VSCode中配置C++调试环境的重要性,详细解析了tasks.json和launch.json的设置,包括编译任务和调试启动配置。通过预设的编译任务和调试配置,能够实现快速代码跟踪和调试,提升开发效率。

1.debug环境重要性

对于开发代码来说,代码的可跟踪调试还是很重要的,能帮助我们快速定位发现问题,提高代码的健壮性,并提高平时工作效率。正好最近开发c++代码,使用了vscode,记录一下vscode上搭建debug环境的经过。虽然看着很简单,其实还是花了一些时间的。

2.vscode是什么

vscode是Microsoft开发并且开源的,全名是Visual Studio Code,但实在太冗长,所以一般叫vscode。微软官方给他的定义是一个免费开源的跨平台编辑器。强调“编辑器”的原因,应该主要是vscode不想成为一个真正意义上的继承开发环境,即IDE。
vscode相比VisualStudio,最主要的有点就是没有VisualStudio那么“重”。其目标是提供一个可以快速编码-编译-调试的“编辑器”。因此与VisualStudio这种真正的IDE相比,就显得比较"轻"。正是因为他的轻,所以现在越来越受欢迎。

3.tasks.json

vscode新建一个项目以后,会自动生成一个.vscode文件夹,该文件夹刚开始是空白的,但是我们可以在里面配置一些文件,其中最重要的就是tasks.json与launch.json。其中,tasks用于在launch前执行编译任务,而launch则是用来读取可执行文件。

我们先来看配置的tasks.json文件

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "build",
			"command": "/usr/bin/clang",
			"args": [
				"-fdiagnostics-color=always",
				"${file}",
				"-o",
				"${fileDirname}/../build/${fileBasenameNoExtension}",
				"-g"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault":true
			},
			"detail": "编译器: /usr/bin/clang"
		}
	]
}

重点分析一下上面的参数。
type:表示任务执行的shell任务。
label:表示任务的名称是build,注意要区分大小写,而且要注意的是,后面的launch中也会调用该名字。
command:执行的命令,因为是mac机器,所以使用的是clang。
args: command后面的参数,注意因为我们需要debug,所以需要加上-g参数。

4.launch.json

直接贴上launch的配置

{
    // 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": "(lldb) Launch",
            "preLaunchTask": "build",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/../build/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "lldb"
        }
    ]
}

重点看下如下几个参数:
preLaunchTask:注意与前面tasks中配置的label名字相同!
program:表示可执行文件的地址,注意业务前面tasks中args配置的输出文件地址相同!

5.调试

上面配置完成以后,在vscode中,点击左侧的运行与调试按钮(带小虫子图标那个),然后选择(lldb) Launch,该调试名字即为前面launch文件所配置的name。
在这里插入图片描述
然后点击运行按钮,会出现下面的debug界面
在这里插入图片描述
注意看下面的终端,里面输出的命令行,就是我们前面tasks.json里配置的command+args组成的命令行。
上面则会有调试窗口出现,依次为继续按钮,单步调过按钮,单步调试按钮,单步跳出按钮,重启按钮以及结束按钮。我们就可以根据自己的需要进行接下来的调试。
箭头指向的高亮行,则是代表代码当前运行行。

在编辑区的左侧,可以查看变量,调用堆栈等常规信息。

6.注意与code-runner配置的区别

当时我尝试了很久没有成功的原因之一,就是因为安装了code-runner的插件。一般在vscode中都会安装code-runner用来执行程序,里面也会有相关配置。比如我再settings.json中,关于code-runner运行c++代码的配置如下:

"code-runner.executorMap": {
        "cpp": "cd $dir && clang++ -g $fileName -o ../build/$fileNameWithoutExt && $dir/../build/$fileNameWithoutExt",
        ...
     }

如果我们点运行按钮,实际执行的是code-runner里的相关配置。而我们debug的时候,与code-runner中的配置无关,需要在前面的tasks与launch中做好正确的配置。

### 配置 VSCodeC++ Debug 环境 #### 插件安装 为了在 VSCode 中实现高效的 C++ 调试环境,需先安装必要的扩展插件。推荐的插件包括 `C/C++` 和 `CodeLLDB` 或者 `C/C++ Clang Command Adapter`[^1]。 - **C/C++**: 提供 IntelliSense 功能以及代码导航支持。 - **CodeLLDB**: 基于 LLDB 的调试工具,适用于 macOS 和 Linux 平台。 - **C/C++ Clang Command Adapter**: 另一种调试适配器选项,适合特定需求场景下的开发者。 这些插件可以通过 VSCode 扩展市场直接搜索并完成安装。 --- #### 文件配置说明 VSCodeC++ 调试环境主要依赖以下几个核心文件: 1. **tasks.json** 该文件定义了构建任务,用于指定编译命令及其参数。以下是基于 g++ 编译器的一个典型例子: ```json { "version": "2.0.0", "tasks": [ { "label": "build hello world", "type": "shell", "command": "g++", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] } ``` 上述配置会通过 `-g` 参数生成带调试信息的目标文件[^4]。 2. **launch.json** 这个文件描述了启动调试会话所需的设置。下面是一个针对本地运行和调试的例子: ```json { "version": "0.2.0", "configurations": [ { "name": "(lldb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/a.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "lldb" } ] } ``` 如果是在 WSL 下工作,则可能需要调整某些路径或者切换到 GDB 模式[^2]。 3. **c_cpp_properties.json** 此文件用来设定头文件查找路径以及其他与 IntelliSense 相关的信息。例如: ```json { "configurations": [ { "name": "Mac", "includePath": [ "/usr/include", "/usr/local/include" ], "defines": [], "compilerPath": "/usr/bin/gcc", "intelliSenseMode": "clang-x64", "browse": { "path": [ "/usr/include", "/usr/local/include" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 4 } ``` 对应不同操作系统时,请修改对应的 include 路径及 compilerPath 属性值[^3]。 --- #### STL 数据可视化处理 默认情况下,在调试过程中查看 STL 容器可能会显示为内存地址而非实际内容。解决这一问题通常涉及更新 GCC 版本至较新版本 (>=7.x),因为新版编译器提供了更好的调试支持特性。 另外也可以尝试自定义 `.gdbinit` 文件加载额外脚本来增强数据展示效果。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值