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

问题描述 投票:0回答:4

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

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

还有

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

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

断点导航器图像

Screen Shot

它说了一些关于

libobjc.A.dylib
libc++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

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

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

screen shot

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

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

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

对于主题 5。这有什么原因吗?

ios objective-c xcode exc-bad-access backtrace
4个回答
0
投票

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

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

然后取消选中它?


0
投票

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

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

看一下这个文档:启用 Malloc 调试功能

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


0
投票

清除 DerivedData 解决了我的问题。

我的应用程序在真实设备中运行良好,仅在模拟器中崩溃。

我尝试的步骤:

  • 我在模拟器中已经卸载并重新安装应用程序,但仍然没有 工作。
  • 在模拟器中选择了擦除模拟器中的所有内容和设置,但仍然不起作用。

请尝试清除DerivedData希望它会起作用。


-1
投票

尝试使用“断点”选项卡中的“符号断点”。通常它有助于找到应用程序崩溃的位置。希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.