XCode LLDB - 从给定的框架中获取自我

XCode LLDB - Get self from a given frame

我想从给定的帧中获取 "self"。有办法吗?

我尝试了 "frame info" 和一些其他选项。

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

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

获取优化函数的参数相当容易w/o 如果您在调用函数时停止调试信息,那么它们仍将位于 ABI 指定的参数传递寄存器中。因此,如果您正在调查的问题是您可以重现的问题,那么在 -[UIImageView _resolveImageForTrait:] 上放置一个自动继续断点并在其命令中打印或 po'ing $arg1 将帮助您解决问题。

但是,如果您试图从这个堆栈开始计算出价值,您的生活就会困难得多。由于您感兴趣的框架调用了另一个函数,因此可以保证您的 self 不再存在于参数传递寄存器中,它已被重用。并且不需要将参数放在函数体内的地方。在优化的代码中,编译器应该对 self 做任何使代码 运行 最快的事情。

确实,如果在您停止调用后,相关框架中未引用 self,则该信息可能根本不存在。

如果 self 在该帧中仍然存在,则它很可能在调用 imageWithTraitCollection: 之前被推入函数中某处的堆栈。调试信息会告诉您它在哪里,但如果没有它,您唯一的选择就是阅读汇编代码并跟随 self 从函数开头的第一个参数寄存器到停止点的传播。这对于一个小函数来说可能还算不错。