Debug Visualizer 对 Python 属基础支持,需手动将变量转为 JSON 字符串(如 json.dumps(data, default=str))才能可视化,因其底层仅解析 JSON,不执行 Python 代码或调用 __repr__。

Debug Visualizer 对 Python 的支持属于“基础支持”,这意味着它不能像对 JavaScript 那样直接渲染任意变量,而是依赖你手动构造 JSON 格式的数据结构。如果你期望点个断点就自动画出树、矩阵或图,会失望——但只要稍加适配,它确实能大幅提升调试效率。
为什么 Debug Visualizer 在 Python 里不能直接可视化嵌套字典?
因为 Python 调试器(debugpy)返回的变量是原始 Python 对象,而 Debug Visualizer 底层只认 JSON。它不执行 Python 代码,也不调用 __repr__ 或 json.dumps —— 你传什么,它就试图解析什么。
常见错误现象:TypeError: Object of type dict is not JSON serializable 或视图空白/报错“Invalid JSON”。
- 不是插件没装好,而是你传了未序列化的 Python 对象(比如含函数、datetime、自定义类实例)
-
print()能输出,Debug Visualizer却挂掉,本质是数据通道不同:前者走 stdout,后者走 JSON 通信协议 - 即使对象纯数据(如
{"a": [1,2], "b": {"x": True}}),也必须确保它是字符串形式的 JSON,而非 Python 字典
怎么让 Python 变量在 Debug Visualizer 里正确显示?
核心动作:在断点处,把目标变量转成 JSON 字符串,再作为表达式输入可视化器。
- 最简方式:在调试时,选中变量名(如
data),按Shift + F1触发Debug Visualizer: Use Selection as Expression,然后在表达式框里手动补上json.dumps(data) - 更稳妥写法(防非 JSONable 类型):
json.dumps(data, default=str, indent=2)——default=str把不可序列化字段转成字符串描述 - 如果变量含
numpy.ndarray或torch.Tensor,先转成 list:data.tolist() if hasattr(data, 'tolist') else data,再dumps - 别写
json.dumps(data, ensure_ascii=False)—— VS Code 插件内部解析可能不兼容 Unicode 直出,建议保持默认 ASCII 安全输出
如何配置 launch.json 让 Python 调试和可视化协同工作?
不需要改 launch.json 来启用 Debug Visualizer,它不依赖调试配置项。但它对调试会话有隐含要求:
立即学习“Python免费学习笔记(深入)”;
- 必须使用
python类型的调试器(即通过debugpy启动),不能用终端直接运行(console模式下无调试上下文) - 确保
launch.json中"type": "python",且已正确指定"python"解释器路径(否则断点不生效,可视化器拿不到变量) - 不要在
launch.json里加"env": {"PYTHONPATH": "..."}等干扰环境的配置——除非你明确知道该变量影响了json模块可用性 - 如果用了 conda 环境,确认该环境中已安装
json(Python 标准库,一般都有;但极少数精简镜像可能剔除)
容易被忽略的兼容细节
很多人卡在“明明写了 json.dumps 还报错”,问题往往不在代码本身:
-
json.dumps返回的是str,但可视化器要求表达式求值结果是 JSON 字符串 —— 如果你在表达式里写json.dumps(data),它确实能运行;但如果写成f"{json.dumps(data)}"或拼接其他字符串,可能引入非法字符(如多余换行、BOM)导致解析失败 - VS Code 版本低于 1.80 时,
Debug Visualizer的 Python 支持不稳定;建议保持 VS Code 为最新稳定版(2026 年推荐 ≥ 1.90) - 扩展本身不处理编码:若变量含 GBK 编码字节串(非 Unicode 字符串),
json.dumps会抛异常 —— 先 decode 再 dump,或统一用 UTF-8 - 可视化器窗口打开后,表达式框里的内容不会自动刷新;每次想看新状态,得手动回车或点击右上角刷新按钮


















