如果我在Xcode调试器的左侧面板中添加一个表达式,从弹出菜单中我可以选择一个标记为Edit Summary Format...
的选项。
这会引发一个名为Set Summary Format for type XXX
的popover,其中XXX
是表达式的类型。
最接近我发现的这个功能的文档是在Xcode帮助,View variables in the debug area
页面,View variables
部分:
编辑变量的摘要格式...在弹出窗口中,输入有效的LLDB表达式,然后单击“完成”。此表达式将覆盖默认格式化程序,并用于为此类型的所有变量创建摘要。
好的,但是popover的占位符文本提到了$VAR
,它似乎是以摘要格式输入的有效内容 - 但是lldb不接受这个!所以我很怀疑这些文档,例如它实际上并不准确。
此功能的其余文档在哪里?
当Xcode使用gdb作为调试器时,以及在gdb对数据格式化程序有任何内置支持之前,发明了这种摘要格式。 Xcode只能理解它,并且主要由于遗留原因而维护。
Xcode不再支持gdb,而是使用lldb。 lldb拥有自己的数据格式化系统:
https://lldb.llvm.org/varformats.html
它的优点是它将应用于Xcode的Variables视图,使用lldb的SB API编写的任何命令,以及所有呈现值的lldb命令行命令(例如expr
,frame var
)。
您可以按照〜/ .lldbinit文件中上面链接中的描述定义格式化程序,它们将同时应用于Xcode调试会话和命令行lldb会话(如果您有理由使用命令行lldb)。维护我创建.lldb目录,将格式化程序放在像formatters.lldb这样的文件中,然后在我的.lldbinit中,执行:
command source ~/.lldb/formatters.lldb
这样,当我正在处理它们时,我可以独立地在格式化程序中获取,而不必担心.lldbinit正在做什么。
根据我的经验,Xcode 11不支持“〜/ .lldbinit”文件。编辑摘要的格式非常随机。例如,如果您的结构具有“小时”,“分钟”,“第二”Int字段,则以下“编辑摘要”无效:
%小时%:%分钟%:%第二% %小时%%分钟%%秒%
但这个是:
%小时% ':%分钟%':%第二%
但你得到这个结果:“5':35':25”