VS Code调试模式下无法查看字符串及集合类变量值求助
VS Code C++调试无法查看string及集合类变量值
环境信息
- 系统:Debian 10
- 编译器:g++ (Debian 8.3.0-6) 8.3.0
问题描述
已在VS Code中配置好launch.json和tasks.json,调试C++程序时仅数值型变量能正常显示值,string类型和集合类变量无法展示字面量内容(比如期望看到"test string",实际只能看到变量的内部结构信息)。尝试多种解决方案均无效,现附上配置文件,寻求能正常查看字符串字面量的方法。
配置文件
launch.json
{ "configurations": [ { "name": "C/C++: g++ 编译并调试当前文件", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "启用gdb的格式化打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "设置反汇编风格为Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true }, { "text": "set charset UTF-8" } ], "preLaunchTask": "C/C++: g++ 编译当前文件", "miDebuggerPath": "/usr/bin/gdb" } ], "version": "2.0.0" }
tasks.json
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ 编译当前文件", "command": "/usr/bin/g++", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务。" } ], "version": "2.0.0" }
解决方案
检查GDB版本及格式化打印支持
终端执行gdb --version确认版本,Debian 10自带GDB版本较旧,对C++标准库的格式化打印支持不完善,可升级到9.x及以上版本。生成完整调试信息
修改tasks.json的编译参数,用-ggdb3替代-g,生成更详细的GDB专用调试信息:"args": [ "-fdiagnostics-color=always", "-ggdb3", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ]修复GDB格式化打印脚本
重新安装GDB的Python支持包:sudo apt-get install gdb-python并在
launch.json的setupCommands中添加加载标准库打印脚本的命令(路径可通过find /usr/share/gdb -name printers.py查找):{ "text": "source /usr/share/gdb/python/libstdcxx/v6/printers.py" }强制启用字符串显示
在launch.json的配置项中添加"showDisplayString": true,强制展示变量的字符串字面量:"configurations": [ { // 原有配置... "showDisplayString": true } ]明确指定C++标准版本
在tasks.json的编译参数中添加-std=c++17(或对应项目使用的标准),确保编译与调试的兼容性:"args": [ "-fdiagnostics-color=always", "-ggdb3", "-std=c++17", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ]
内容的提问来源于stack exchange,提问作者user18303981
相关产品推荐
相关产品推荐

