XCode LLDB - 从给定帧中获取自己

时间:2016-11-23 10:01:26

标签: xcode debugging lldb

我想得到" self"从给定的框架。有没有办法做到这一点?

我试过"框架信息"以及其他一些选择。

(lldb) frame info frame #11: 0x0000000102767ab8 UIKit`-[UIImageView _resolveImageForTrait:] + 463 (lldb)

例如,在以下示例中,我想要第11帧的按钮对象。

enter image description here

1 个答案:

答案 0 :(得分:3)

如果在调用函数时停止调用信息,那么将参数调整为优化函数是非常容易的,因为它们仍将在ABI指定的参数传递寄存器中。因此,如果您正在调查的问题是可以重现的问题,在-[UIImageView _resolveImageForTrait:]上放置自动继续断点并在其命令中打印或调整$arg1将帮助您解决问题。

但如果你试图从这个堆栈开始计算出价值,你的生活就会变得更加艰难。由于您感兴趣的帧调用了另一个函数,因此可以保证您的self不再存在于参数传递寄存器中,它已被重用。并且没有必要的地方将参数放在函数体内。在优化的代码中,无论是什么使代码运行最快,编译器都应该使用self。

实际上,如果在您停止呼叫之后未在相关帧中引用self,则信息可能根本不存在。

如果self在该帧中仍然存在,则很可能在调用imageWithTraitCollection之前将其推送到函数中的某个堆栈中。调试信息会告诉你它在哪里,但没有它,你唯一的选择是读取汇编代码并跟踪self从函数开头的第一个参数寄存器到你被停止点的传播。对于一个小函数来说,这可能不是太糟糕。