21

对于 iOS 模拟器上的调试,我曾经能够读出 $eax 寄存器并得到错误消息。但是,我不知道是不是新的XCode 4.6版和iOS 6.1,我不能再这样做了。

(lldb) po $eax
error: Couldn't materialize struct: Couldn't read eax (materialize)
Errored out in Execute, couldn't PrepareToExecuteJITExpression

现在怎么办?另外eax不在真实设备中,我该怎么办?

4

3 回答 3

28

虽然 trojanfoe 给出了一个很好的答案,但也可能对其他人有所帮助的是,如果您由于未显示消息的异常而尝试打印 $eax,请确保您位于 Debug Navigator 的 objc_exception_throw 框架中(⌘</kbd>+6) when printing it out. Otherwise you'll get the "couldn't materialize" error above.

于 2013-03-10T19:24:55.243 回答
18

根据此 LLDB 指南,您可以使用:

register read

检查当前线程的通用寄存器

于 2013-02-05T10:00:53.533 回答
3

确保您当前的构建方案处于调试模式,否则编译的应用程序将通过剥离额外的调试信息来优化。

如果您正在设置自己的构建方案,请转到构建设置 -> 代码生成 -> 优化级别,将值设置为“无 [-O0]”。

于 2014-11-17T09:55:18.650 回答