首页 文章

iOS应用程序崩溃与EXC_BAD_ACCESS,异常断点不指向代码

提问于
浏览
1

我正在努力升级一个旧项目以在更新版本的iOS上工作,但我在启动屏幕上遇到此错误:

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

And

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

为了找出代码中的位置,我启用了僵尸对象,并为所有异常设置断点 . 当应用程序崩溃时,断点不会突出显示一段代码,而是执行此操作:

Image of breakpoint navigator

Screen Shot

它说的是 libobjc.A.dyliblibc++abi.dylib ,所以我假设这不是我的代码的一部分?此外,点击断点不会让我进入代码中的位置,就像人们通常所说的那样 .

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

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

我从后面的跟踪中读到你可以确定一个方法或文件等,但这个输出似乎没有 .

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

EDIT: 我应该提一下应用程序在模拟器上崩溃: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

崩溃原因的差异非常令人困惑 .

EDIT: 以下是调试导航器的屏幕截图:

screen shot

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

错误:内存读取失败为0xaeb3f7600线程5:EXC_BAD_ACCESS(代码= 257,地址= 0x20aeb3f7693)

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

3 回答

  • 0

    嘿可能的问题是debug-disassembly选项可以

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

    并取消选中?

  • 0

    尝试在"Breackpoints"标签中使用"Symbolic Breackpoint" . 通常,它有助于找到应用程序崩溃的位置 . 希望能帮到
    enter image description here

  • 0

    看起来您有内存访问错误,例如读取不可读的位置,写入未分配(或已经释放)的位置等等 .

    对于这类问题有调试技术,但这很困难 .

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

    如果可能的话,从malloc guard开始(定位写错),最后一种方法是从malloc日志输出中搜索有问题的内存地址 .

相关问题