【问题标题】:iOS app crashes with EXC_BAD_ACCESS, Exception breakpoint not pointing to codeiOS 应用程序因 EXC_BAD_ACCESS 崩溃,异常断点未指向代码
【发布时间】:2019-05-12 02:31:49
【问题描述】:

我正在升级一个旧项目以在新版本的 iOS 上运行,但我在启动屏幕上不断出现崩溃并出现以下错误:

错误:0x7c37d3000 的内存读取失败

线程 4:EXC_BAD_ACCESS(代码=257,地址=0x1c7c37d309d)

为了找出它在代码中的位置,我启用了僵尸对象,并为所有异常设置了一个断点。当应用程序崩溃时,断点不会突出显示一段代码,而是这样做:

断点导航器图片

它说明了libobjc.A.dyliblibc++abi.dylib,所以我假设这不是我的代码的一部分?此外,单击断点不会像人们通常所说的那样将我带到代码中的位置。

这是 lldb 控制台中 bt 的结果(回溯):

* thread #4, stop reason = EXC_BAD_ACCESS (code=257, address=0x1c7c37d309d)
  * frame #0: 0x00000007c37d309d

我从这个回溯中读到,你可以确定一个方法或文件等,但这个输出似乎没有。

如何确定此错误来自代码的确切位置?让我知道我是否应该提供其他任何东西,因为我是这个网站的新手。谢谢!

编辑:我可能应该提到应用程序在模拟器上崩溃:Error 这是该错误的回溯:

> * thread #3, stop reason = signal SIGABRT   * frame #0: 0x0000000107d5cb66 libsystem_kernel.dylib`__pthread_kill + 10
>     frame #1: 0x0000000107d96080 libsystem_pthread.dylib`pthread_kill + 333
>     frame #2: 0x00000001012b7405 libclang_rt.tsan_iossim_dynamic.dylib`wrap_pthread_kill + 325
>     frame #3: 0x0000000107b09c45 libsystem_c.dylib`abort + 127
>     frame #4: 0x00000001012b669c libclang_rt.tsan_iossim_dynamic.dylib`wrap_abort + 108
>     frame #5: 0x00000001008d5c0f GiFmojo`inittls + 431
>     frame #6: 0x00000001008d5a32 GiFmojo`runtime.etext + 98
>     frame #7: 0x00000001006fe19c GiFmojo`runtime.rt0_go + 140
>     frame #8: 0x0000000107d93661 libsystem_pthread.dylib`_pthread_body + 340
>     frame #9: 0x0000000107d9350d libsystem_pthread.dylib`_pthread_start + 377
>     frame #10: 0x0000000107d92bf9 libsystem_pthread.dylib`thread_start + 13

崩溃原因的区别非常令人困惑。

编辑:这是调试导航器的屏幕截图:

编辑:我禁用了僵尸对象,它现在在线程 4 和线程 5 之间交替,出现错误:

错误:0xaeb3f7600 的内存读取失败

线程 5:EXC_BAD_ACCESS(代码=257,地址=0x20aeb3f7693)

对于线程 5。这是有原因的吗?

【问题讨论】:

  • 你搞定了吗?
  • 不,很遗憾。还没有。
  • 你在项目中添加了libz.tbl库吗?
  • 不,我不这么认为...那是什么?

标签: ios objective-c xcode exc-bad-access backtrace


【解决方案1】:

嘿,可能的问题是调试反汇编选项吗

转到调试选项卡 -> 调试工作流程 -> 始终显示调试反汇编

并取消选中?

【讨论】:

  • 您好,看起来在首次亮相选项卡下的调试工作流下始终显示反汇编没有检查。你是这个意思吗?谢谢!
  • 是的,所以当我禁用它并开始指出代码时,对我来说。
  • 您能否尝试启用其他断点选项,例如 Swift 错误、异常、符号、约束错误,或者您可以给我们一些步骤重现此问题,因为它可能与您的项目设置完全相关,但不确定
  • 您好,我尝试了所有的断点,但似乎都没有任何作用。很抱歉,这个项目非常大,我刚刚得到这个来更新,所以我真的不知道你如何重现。谢谢!
  • 我也有这个警告:Not running swift-stdlib-tool: ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 已启用,但产品类型 'com.apple.product-type.library.static' 不是包装器类型。 (在目标“Pods-GiFmojo”中)。这有关系吗?
【解决方案2】:

尝试使用“断点”选项卡中的“符号断点”。很多时候,它有助于找到应用程序崩溃的位置。希望对您有所帮助

【讨论】:

  • 嗨,在这种情况下,我应该为符号和条件输入什么?谢谢!
  • 是的,因为我们不确定是什么导致了异常,所以最好把这个检查我猜是这样
  • @user10747039 给 at 添加一些名称,应用程序应该会在崩溃的位置停止
  • 抱歉,我不确定我是否理解。我应该为符号添加任何名称吗?
  • 按添加操作
【解决方案3】:

您似乎有内存访问错误,例如读取不可读的位置、写入未分配(或已释放)的位置等等。

这类问题有调试技术,但难度很大。

看看这个文档:Enabling the Malloc Debugging Features

如果可能,从 malloc 保护开始(定位错误写入),最后的手段是从 malloc 日志输出中搜索有问题的内存地址。

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多