macOS Vscode 调试C++ 不能正确显示STL容器的值(size==0)

文章目录

    • 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.jsontype设置为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容器的值了;
macOS Vscode 调试C++ 不能正确显示STL容器的值(size==0)_第1张图片

你可能感兴趣的:(环境配置)