【问题标题】:iPhone - Debugging EXC_BAD_ACCESS crashesiPhone - 调试 EXC_BAD_ACCESS 崩溃
【发布时间】:2023-03-03 17:31:01
【问题描述】:

有时,在调试应用程序时,我会在 Xcode 上看到此错误:

节目接收信号:“EXC_BAD_ACCESS”。

并且调试器不会在有问题的行上停止。事实上,调试器只是向我展示了一个包含一堆汇编语言代码的页面,仅此而已。

我必须拥有超自然的力量才能找出问题的确切位置。

有没有办法强制 Xcode 给我更多“有营养的”错误消息——可以详细说明问题——并在发生此类错误时停止在违规行上?

感谢您的帮助。

【问题讨论】:

    标签: iphone cocoa cocoa-touch xcode


    【解决方案1】:

    您可以启用 NSZombies see here,我找到了一个查看实际问题所在的好方法,即在打开调试器的情况下运行和调试程序。

    这样当程序更频繁地停止执行它时,然后显示程序崩溃时正在执行的行。

    【讨论】:

    • 谢谢。我已启用此功能,但没有看到任何打开的执行。错误消息从 EXC_BAD_ACCESS 更改为 ...-[CALayer retain]: message sent to deallocated instance 0x182200 ... 但我看不出这有什么帮助,因为我的代码中不知道这个对象是什么...我有很多 CALayers...这是控制台上打印的唯一一行。
    • 如果你打开了调试器,你应该能够看到堆栈跟踪,它应该提供更多信息
    【解决方案2】:

    当崩溃发生时,在 Xcode 中打开调试器(运行 -> 调试器)。应该有 3 到 4 个这样的窗格:

    http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/XcodeDebugging/art/debugger_disassembly.jpg

    在左上角的窗格(“堆栈跟踪”)中,选择最上面的非灰色行。

    (注意:有时堆栈跟踪只能找到内部函数,因为在运行循环中触发了糟糕的内存管理。尝试构建 -> 构建和分析以首先消除所有潜在的内存管理错误。)

    【讨论】:

      【解决方案3】:

      我写了一篇博客,告诉您如何使用一些编译器开关,这些开关有助于发现由于在您完成对象之前释放对象而导致的崩溃。

      http://loufranco.com/blog/files/debugging-memory-iphone.html

      Build and Analyze 没问题,但不如 scan-build(它基于它)。安装说明如下:

      http://loufranco.com/blog/files/scan-build-better-than-build-analyze.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        • 2011-08-29
        • 1970-01-01
        • 2013-03-24
        相关资源
        最近更新 更多