文章目录
- mac上配置vs code
- 方案一 使用Code Runner
- 方案二
- task.json
- launch.json
- macOS 调试C++ 不能正确显示STL容器的值
mac上配置vs code
方案一 使用Code Runner
安装Code Runner
插件,然后在设置中配置Exectuor Map/setting.json
文件,配置如下
可以在插件中找到Runner插件,然后点击 右下角的设置->扩展设置->Exectuor Map->setting.json 中找到相关配置
{
"explorer.confirmDelete": false,
"python.pythonPath": "/Users/wjq/anaconda3/bin/python",
"C_Cpp.updateChannel": "/usr/local/g++",
"workbench.iconTheme": "vs-minimal",
"terminal.integrated.shell.linux": "/bin/bash",
"explorer.confirmDragAndDrop": false,
"window.zoomLevel": 0,
"code-runner.executorMap": {
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ -std=c++11 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
},
"code-runner.runInTerminal": true,
"terminal.integrated.inheritEnv": false,
"python.dataScience.askForKernelRestart": false
}
主要是配置 终端运行命令(路径+shell执行命令),相当于我们使用Runner
运行c++
程序时,相当于在终端中执行cd $dir && g++ -std=c++11 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt
,
调到目标文件路径,然后使用g++
编译目标源文件,并且执行生成文件;相应的,对于python
之类的也是同样的道理,配置中我的python解释器使用的/Users/wjq/anaconda3/bin/python
,对于多个python环境的一定要修改为自己使用的环境;
方案二
使用 Vs Code 自带的配置运行C++,需要设置两个json文件,其中launch.json文件(负责调试程序),另一个tasks.json文件(负责编译程序),下面简单介绍一个对应文件如何编写和使用.
task.json
主要是对代码进行编译,而该编译操作命令写成一个任务,使用vscode的task用来编译自己写的代码。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "g++",
"args": [
"-g",
"-std=c++11",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
],
"options": {
"cwd": "/usr/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
参数说明:
- “label”: 任务的名称 (
g++ build active file
),和下文介绍的launch有联系 - “type” : 任务的类型,一共有两种
(shell/Process)
,其中shell表示先打开shell,再执行输入命令;process则直接执行命令 - “command”: 实际上执行的命令(c++ 使用g++命令进行编译)
- “args”: 需要设置的一些参数,应该是跟再command命令后面的.
g++ -g -std=c++11 file.cpp -o dir/filebasename
launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"preLaunchTask": "g++ build active file",
"terminal": "integrated"
}
]
}
参数说明:
- “name”: 配置名称,之后会出现再调试窗口的启动配置上
- “type”: 配置类型,
后面介绍的mac调试c++不能正确显示容器内容,就是修改这个配置
- “request”: 请求配置类型,可以设置为 launch(启动) 或者 attach(附加)
- “program”: 进行调试的程序的位置,和上文
task.json
生成的执行文件保持相同,"${fileDirname}/${fileBasenameNoExtension}"
- “stopAtEntry”: 设置为true时,程序将会暂停在程序的入口中
- “cmd”: 当前调试所在的路径
- “externalConsole”: 调试是否显示控制台窗口,true即显示控制台
- “preLaunchTask”: 调试前需要执行的命令,需要和
task.json
中的label(g++ build active file)
保持一致,相当于调试之前需要先执行 编译命令;
macOS 调试C++ 不能正确显示STL容器的值
在macOS下使用VS code进行C++调试时,碰到vector、set、map等类的内容无法正常显示,只显示为size == 0
,原因是macOS的c++编译器更新比较慢,对于STL的debug支持不是太好;
搜了很多资料,最后在这个 issue 下发现了遇到相同问题的人,最终解决,问题的关键就在于使用 CodeLLDB 插件代替 vscode 自带的 lldb插件。
安装 CodeLLDB 插件
安装CodeLLDB插件,使用简单,只需将launch.json
的type
设置为lldb
即可(原生类型一般为cppdbg/cppvsdbg
);
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ build and debug active file",
"type": "lldb",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"preLaunchTask": "g++ build active file",
"terminal": "integrated"
}
]
}
再次调试,发现就可以正确显示STL容器的值了;