VS Code中使用LLDB调试时,如何让Hover直接显示字符串变量值?
在Mac ARM64平台VS Code调试Nim转C程序的变量显示优化问题
我在Mac OS(arm64)平台的VS Code中调试一个由Nim转译为C的程序。目前断点设置、栈追踪都正常,但查看变量时只显示内存地址而非实际值。以变量msg为例,不管是添加监视、在LLDB命令行输入变量名,还是编辑器Hover该变量,都得展开结果里的p属性(推测是指针)才能看到实际值。我希望Hovermsg时直接显示值,比如“file not found”,但实际得点击Hover弹窗里的“{...}”再展开p才行。
我的launch.json配置如下:
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "cppdbg", "request": "launch", "name": "Debug PDX", "program": "${env:PLAYDATE_SDK_PATH}/bin/Playdate Simulator", "args": [ "${workspaceFolder}/${workspaceFolderBasename}.pdx" ], "cwd": "${workspaceFolder}", "osx": { "MIMode": "lldb", "program": "${env:PLAYDATE_SDK_PATH}/bin/Playdate Simulator.app" }, //[..] }
优化方案
给LLDB添加类型格式化规则:Nim转译为C后,字符串等变量会被包装成带
p指针的结构体,直接配置LLDB自动解析这个字段即可。- 创建
.lldbinit文件(可放在用户主目录或项目根目录),添加以下规则:
若不确定结构体具体类型,可在LLDB命令行执行type summary add --summary-string "${var.p}" NimStringDesctype lookup msg查看实际类型名称。 - 如果是自定义结构体,将
NimStringDesc替换为对应的结构体名称即可。
- 创建
在VS Code调试配置中自动加载规则:修改launch.json里的
osx配置段,添加启动命令自动加载格式化脚本:"osx": { "MIMode": "lldb", "program": "${env:PLAYDATE_SDK_PATH}/bin/Playdate Simulator.app", "setupCommands": [ { "text": "command source ~/.lldbinit" } ] }编译时启用调试友好参数:编译Nim程序时添加
--debugger:native或-d:debug参数,生成的C代码会包含更完整的调试信息,帮助LLDB更准确识别变量类型。
内容的提问来源于stack exchange,提问作者Nino van Hooff
相关产品推荐
相关产品推荐

