当通过Xcode连接到调试器时,LLDB提供了一个有用的局部变量视图(截图的左下角):
我找到了一个LLDB命令frame variable
(以及gdb的info locals
),它提供了一个局部变量列表(如上面屏幕截图右侧所示)。
我希望这个功能可以在运行时在设备上执行。例如,我可以使用backtrace_symbols()
访问堆栈跟踪,通过_cmd
访问当前选择器,以及其他几个。
有没有人在这方面有经验?提前谢谢。
答案 0 :(得分:4)
Xcode / LLDB可以向您显示此信息,因为他们可以访问二进制文件中的调试信息,称为符号表,这有助于它了解哪些内存位置与源代码中的哪些名称相对应。这都在Objective-C运行时之外,并且运行时没有接口可以实现它。
但是,这也是为什么它不会起作用的另一个原因。当您构建要在调试器中运行的代码时,编译器优化将被关闭,因此您在代码中引用的所有变量都在那里。
但是,当您为发布版本构建时,通常编译器优化会进入并重新排列所有精心命名的局部变量,以使运行更快。它们甚至可能永远不会存储在内存中,只能存储在CPU寄存器中。或者它们可能根本不存在,如果优化器可以向自己证明它不需要它们。
我的建议是再考虑一下你试图解决的更大问题......