我对如何使用 LLDB 来检查 swift 项目中的对象感到有点困惑。在这种特殊情况下,我使用 NSJSONSerializer 序列化一小块 JSON,并且我想检查该值。在 Xcode 5.1 中,这非常简单,只需在 lldb 提示符下输入“po json”,我就会得到我想要的。现在,命令 po 和 print 因打印出大部分垃圾而让我失败。我什至尝试调用描述属性,因为它适用于某些快速类型,但仍然不起作用。作为最后的手段,我使用了带有 println 语句的表达式,最终成功了。当然一定有更好更简单的方法吗?这是 LLDB 的输出:
(lldb) print json
(AnyObject?) $R4 = (instance_type = Builtin.RawPointer = 0x00007ff05c0c49d0 -> 0x0000000107ef32c8 (void *)0x0000000107ef32f0: __NSCFDictionary)
(lldb) po json
(instance_type = Builtin.RawPointer = 0x00007ff05c0c49d0 -> 0x0000000107ef32c8 (void *)0x0000000107ef32f0: __NSCFDictionary)
{
instance_type = 0x00007ff05c0c49d0 -> 0x0000000107ef32c8 (void *)0x0000000107ef32f0: __NSCFDictionary
}
(lldb) print json.description?
error: <EXPR>:1:1: error: 'Optional<AnyObject>' does not have a member named 'description'
json.description?
^ ~~~~~~~~~~~
(lldb) po json.description?
error: <EXPR>:1:1: error: 'Optional<AnyObject>' does not have a member named 'description'
json.description?
^ ~~~~~~~~~~~
(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
1 println(json)
2
Optional({
errors = {
"authorizations.provider_user_id" = (
"has already been taken"
);
};
})
(lldb)
你可以试试
(lldb) expr -O -d run -- json!
“po”的工作方式与 ObjC 中的工作方式不同,这是一个已知的限制。显式解开可选值,并允许对解开的值进行动态类型解析应该可行