【问题标题】:KERN_INVALID_ADDRESS at 0x0000000000000000KERN_INVALID_ADDRESS 在 0x0000000000000000
【发布时间】:2015-06-18 11:22:11
【问题描述】:

我使用 Xcode 6.3.2 开发了一个 iPad 应用程序。 我将我的申请提交到 App Store 进行审核,但由于崩溃而被拒绝。以下是来自 iTunes 的崩溃报告。

Incident Identifier: 88DD7F94-3382-4241-A0D7-C3E7F6D20737
CrashReporter Key:   9881ae0cc3b3fbfccfd0ce1496d2fa08fec08782
Hardware Model:      xxx

Path:                /private/var/mobile/Containers/Bundle/Application/FDBBD67F-0EF7-43FB-80CB-8308A10A2D29/Vehicle Visuals.app/Vehicle Visuals
Identifier:          com.vehiclevisuals.Vehicle-Visuals
Version:             2.0.0 (1.1.0)
Code Type:           ARM-64 (Native)
Parent Process:      launchd [1]

Date/Time:           2015-06-12 12:33:57.988 -0700
Launch Time:         2015-06-12 12:22:14.581 -0700
OS Version:          iOS 8.3 (12F69)
Report Version:      105

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x0000000195da7bdc 0x195d8c000 + 113628
1   QuartzCore                      0x00000001889fdc2c 0x1889ec000 + 72748
2   Vehicle Visuals                 0x0000000100126828 0x1000ec000 + 239656
3   Vehicle Visuals                 0x0000000100101e80 0x1000ec000 + 89728
4   UIKit                           0x0000000189118778 0x1890a4000 + 477048
5   UIKit                           0x0000000189116750 0x1890a4000 + 468816
6   UIKit                           0x0000000189112000 0x1890a4000 + 450560
7   UIKit                           0x00000001890b175c 0x1890a4000 + 55132
8   QuartzCore                      0x00000001889f9e18 0x1889ec000 + 56856
9   QuartzCore                      0x00000001889f4880 0x1889ec000 + 34944
10  QuartzCore                      0x00000001889f4724 0x1889ec000 + 34596
11  QuartzCore                      0x00000001889f3eb8 0x1889ec000 + 32440
12  QuartzCore                      0x00000001889f3c38 0x1889ec000 + 31800
13  UIKit                           0x0000000189137f8c 0x1890a4000 + 606092
14  UIKit                           0x0000000189137ef0 0x1890a4000 + 605936
15  CoreFoundation                  0x000000018462c2a0 0x18454c000 + 918176
16  CoreFoundation                  0x000000018462922c 0x18454c000 + 905772
17  CoreFoundation                  0x000000018462955c 0x18454c000 + 906588
18  CoreFoundation                  0x00000001845552d0 0x18454c000 + 37584
19  GraphicsServices                0x000000018dc436f8 0x18dc38000 + 46840
20  UIKit                           0x000000018911afa8 0x1890a4000 + 487336
21  Vehicle Visuals                 0x000000010013a1cc 0x1000ec000 + 319948
22  libdyld.dylib                   0x0000000196412a04 0x196410000 + 10756

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager

根据报告,它在操作系统版本:iOS 8.3 (12F69) 上崩溃。 我在具有相同配置(iOS 版本 8.3 (12F69))的所有模拟器(iPad Air、iPad 2、iPad Retina)上测试了我的应用程序,并在我的设备(iPad mini)上使用 iOS 版本 8.3(12F69)进行了测试,但没有没有撞到我这边。 但它在我朋友的 iPad Air 上使用相同的 iOS 版本崩溃(它给出了相同的崩溃报告,但不同的无效地址如下)

异常类型:EXC_BAD_ACCESS (SIGSEGV) 异常子类型: KERN_INVALID_ADDRESS at 0x0000000000000020 由线程触发:0

我没有 iPad Air,因此我可以使用该设备进行调试。

我还尝试使用以下命令符号化崩溃报告。

xcrun atos -o VehicleVisuals 0x0000000000000020

但它只是给了我以下十六进制代码。

0x00000020(在 VehicleVisuals 中)

我关注Link 进行符号化。

我只是无法识别崩溃问题的实际位置。 请问有人可以帮帮我吗?

【问题讨论】:

  • 在与您的代码关联的堆栈地址上尝试使用 atos:0x0000000100126828 和 0x0000000100101e80。
  • @PhillipMills 给我以下结果:xcrun atos -o VehicleVisuals 0x0000000100101e80 encodingTable (in VehicleVisuals) + 4660
  • @PhillipMills 我的应用程序名称是“Vehicle Visuals”,所以在运行 atos 时它给了我错误“atos 无法为架构 armv7s 的 VehicleVisuals 文件加载符号。”。所以我把它重命名为VehicleVisuals,它在运行atos时是否生效?
  • 提醒我一个错误。您是否使用 XCode 将您的项目提交到 iTunes Connect?如果是这样,请使用 App Loader 看看它是否也崩溃了...
  • @CanATAC 是的,我使用 Xcode 将项目提交到 iTunes Connect。

标签: ios objective-c xcode6 app-store


【解决方案1】:

EXC_BAD_ACCESS 通常是因为您将 Obj-C 消息发送到无效的内存地址,这意味着您可能正在尝试访问一些已释放的对象。

它可能在其他设备上工作,因为这个对象没有同时被释放。

我最近发生了类似的崩溃,因为在 dealloc 上没有使计时器无效,并且当调用目标方法时,该对象不再存在。

您可以尝试启用 NSZombie 对象并查看是否找到正在释放的对象。在 xCode 6 中,您可以在 Product > Scheme > Edit scheme > Diagnostics > Enable Zombie Objects 中启用它们。

此外,还有很多 NSZombieEnabled 无法检测到的此类错误。不幸的是,没有什么神奇的方法可以解决它。第二种选择是使用仪器运行您的应用程序(特别是内存泄漏),看看您是否能得到一些东西。如果这不起作用,您将不得不检查您的代码并检查您是否有可能尝试访问已释放的对象。希望对您有所帮助。

祝你好运!

【讨论】:

  • 我已经启用了 NSZombie 对象来跟踪 EXC_BAD_ACCESS。问题是它不会在我正在测试的任何一个模拟器上崩溃,也不会在我的硬件设备(iPad mini)上崩溃。它在我通过 Test Flight 向其发送应用程序的客户端的 iPad Air 上崩溃。如果我能重现我这边的问题,我很容易解决它。
  • 是的,有很多这样的错误是 NSZombieEnabled 无法检测到的。不幸的是,没有什么神奇的方法可以解决它。第二种选择是使用仪器运行您的应用程序(特别是内存泄漏),看看您是否能得到一些东西。如果这不起作用,您将不得不检查您的代码并检查您是否有可能尝试访问已释放的对象。希望能帮助到你。这种错误有时是最难调试的。
  • 感谢您的回复。我实际上已经弄清楚了这个问题,现在它工作正常。实际上,我必须在 iPad Air 上对其进行测试才能确定 EXC_BAD_ACCESS 实际发生的位置:)
  • @Mahesh:您可以将解决方案放在这里,作为您面临的问题的根本原因和解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2017-04-02
相关资源
最近更新 更多