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 从函数开头的第一个参数寄存器到停止点的传播。这对于一个小函数来说可能还算不错。
我想从给定的帧中获取 "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 从函数开头的第一个参数寄存器到停止点的传播。这对于一个小函数来说可能还算不错。