【问题标题】:error: Couldn't materialize struct: Couldn't read eax错误:无法实现结构:无法读取 eax
【发布时间】:2013-02-05 09:41:30
【问题描述】:

为了在 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不在真机,怎么办?

【问题讨论】:

  • 您可以使用 po $r0 在真实设备中完成相同的操作 =D

标签: objective-c debugging


【解决方案1】:

虽然 trojanfoe 给出了很好的答案,但也可能对其他人有所帮助的是,如果您由于未显示消息的异常而尝试打印 $eax,请确保您位于 objc_exception_throw 框架中打印出来时调试导航器 (+6)。否则你会得到上面的“couldn't materialize”错误。

【讨论】:

  • 哇,谢谢,这个答案来得有点晚,但看起来正好解决了我的问题。我去看看。
  • 我想我在 objc_exception_throw 中,它仍然说无法实现。它曾经在 4.5 版本的 XCode 上工作。
【解决方案2】:

根据this LLDB guide,可以使用:

register read

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 这非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2019-05-05
    • 2021-04-21
    • 1970-01-01
    • 2013-08-26
    • 2018-08-23
    • 2013-08-01
    相关资源
    最近更新 更多