当前位置: 首页 > article >正文

如何解决 VS Code 调试时无法查看 std 中变量的问题

在使用 VS Code 调试 C++ 程序时,我们经常遇到查看 std 容器或字符串变量时只显示一串数字而看不到实际值的情况。这是由于调试器未启用 pretty-printing 功能导致的。为了解决这个问题,可以在 launch.json 中进行配置。
在这里插入图片描述

问题描述

在调试 C++ 程序时,例如查看 std::stringstd::vector,调试窗口中可能显示的内容如下:

std::string = { _M_dataplus = { _M_p = 0x600001e0b580 <<string> } }

这样的显示方式对开发者并不友好,无法直观了解变量的值。

解决方案

通过配置 VS Code 的 launch.json 文件,可以启用 GDB 的 pretty-printing 功能。

以下是具体步骤:

  1. 打开你的 VS Code 项目。
  2. 找到项目中的 launch.json 文件。如果没有该文件,可以通过点击 运行和调试创建 launch.json 文件 自动生成。
  3. launch.json 的配置中,加入以下内容:
"setupCommands": [
    {
        "description": "Enable pretty-printing for GDB",
        "text": "-enable-pretty-printing",
        "ignoreFailures": true
    },
    {
        "description": "Register libstdc++ pretty printers",
        "text": "python import sys;sys.path.insert(0, '/usr/share/gcc/python');from libstdcxx.v6.printers import register_libstdcxx_printers;register_libstdcxx_printers(None)",
        "ignoreFailures": false
    }
]
参数说明
  • Enable pretty-printing for GDB:
    • 通过 GDB 内置命令 -enable-pretty-printing 启用格式化输出。
  • Register libstdc++ pretty printers:
    • 通过 Python 脚本加载 libstdc++ 提供的格式化输出功能,确保 GDB 能正确解析和显示 std 容器中的内容。
    • '/usr/share/gcc/python'libstdc++ Pretty Printers 的路径。根据你的系统环境,这个路径可能不同。
完整示例

以下是一个完整的 launch.json 配置示例:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "GCC Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/your_program",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for GDB",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Register libstdc++ pretty printers",
                    "text": "python import sys;sys.path.insert(0, '/usr/share/gcc/python');from libstdcxx.v6.printers import register_libstdcxx_printers;register_libstdcxx_printers(None)",
                    "ignoreFailures": false
                }
            ]
        }
    ]
}
验证效果
  1. 保存 launch.json 文件。
  2. 重新启动调试会话。
  3. 当你在调试窗口中查看 std::stringstd::vector 等变量时,应该可以直接看到其具体内容,而不是一串难以理解的内部数据。
注意事项
  • 如果你的系统中 libstdc++ Pretty Printers 路径不是 /usr/share/gcc/python,需要根据实际路径进行修改。可以通过以下命令检查路径:
    find /usr -name "printers.py"
    
  • 确保 GDB 和 GCC 版本兼容,且安装了调试符号表包(如 g++-<version>-dbg)。

通过以上配置,可以大大提升 VS Code 调试 C++ 程序时的开发体验,轻松查看变量内容!


http://www.kler.cn/a/488216.html

相关文章:

  • RocketMQ 和 Kafka 有什么区别?
  • MMDetection框架下的常见目标检测与分割模型综述与实践指南
  • Zookeeper 集群安装
  • C++ 常见面试题(二)
  • 分布式环境下定时任务扫描时间段模板创建可预订时间段
  • Elixir语言的学习路线
  • pgsql 连接数查看、释放
  • 【AniGS】论文阅读
  • Docker 通过创建Dockerfile 部署Jar包
  • MATLAB对文件处理
  • springboot整合gateway
  • 多云架构,JuiceFS 如何实现一致性与低延迟的数据分发
  • [IoT]解决方案设计:智能农业监控系统
  • pytorch模型的保存失敗しましたが、
  • JVM生产环境常用参数配置及调优建议
  • vue3+ElementPlus+VueCropper实现上传图片
  • Day97 minio
  • 详细分析 创建并上传到 GitHub 仓库
  • 【每日学点鸿蒙知识】调试、网络、缓存、富文本编辑等
  • Unity学习之UGUI进阶
  • android studio使用DataBinding
  • Unity使用Vuforia插件进行AR开发
  • Django REST framework 源码剖析-视图集详解(ViewSet)
  • 使用Logstash 将Mysql的数据导入ElasticSearch中
  • (超详细)Maven安装配置、以及在IDEA中创建Maven项目
  • LeetCode 2765. 最长交替子数组解析与解题思路