【问题标题】:ios app strange crash on startios应用程序启动时奇怪的崩溃
【发布时间】:2013-10-16 11:32:38
【问题描述】:

我的名为 OBI 的项目在从 Xcode 启动时工作正常,但是当我创建 .ipa 文件时,它会因提供的日志而崩溃。 在项目中没有名称为:MutexDelayedPointerDeletionManagerMemoryManager 的类,所以我无法理解这个异常来自哪里。

Thread 0 Crashed:
0   libsystem_pthread.dylib         0x396b7046 _pthread_mutex_check_init + 14
1   libsystem_pthread.dylib         0x396b6e32 _pthread_mutex_lock + 22
2   OBI                             0x02a74f20 Mutex::Lock() (Mutex.cpp:152)
3   OBI                             0x02838930 DelayedPointerDeletionManager::AddPointerToMainThreadDealloc(void*, MemLabelId) (Mutex.h:32)
4   OBI                             0x028384a4 MemoryManager::Deallocate(void*, MemLabelId) (MemoryManager.cpp:1082)
5   OBI                             0x028384e4 operator delete[](void*) (MemoryManager.cpp:114)
6   OBI                             0x01d28010 std::locale::locale<boost::filesystem::detail::utf8_codecvt_facet>(std::locale const&, boost::filesystem::detail::utf8_codecvt_facet*) (locale_classes.h:581)
7   OBI                             0x01d281c4 ___lldb_unnamed_function148423$$OBI + 232
8   dyld                            0x2be5b59e ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) + 174
9   dyld                            0x2be5b6ac ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) + 16
10  dyld                            0x2be58d34 ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) + 356
11  dyld                            0x2be58b88 ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) + 36
12  dyld                            0x2be4fd38 dyld::initializeMainExecutable() + 164
13  dyld                            0x2be52ab4 dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 1748
14  dyld                            0x2be4f22a dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) + 346
15  dyld                            0x2be4f064 _dyld_start + 60

编辑,控制台几行。

Oct 16 14:43:18 Sergiys-iPad kernel[0] <Debug>: launchd[9526] Container: /private/var/mobile/Applications/AA46736B-6348-42BA-A8F0-DD63DC535AF6 (sandbox)
Oct 16 14:43:19 Sergiys-iPad ReportCrash[9527] <Notice>: ReportCrash acting against PID 9526
Oct 16 14:43:19 Sergiys-iPad ReportCrash[9527] <Notice>: Formulating crash report for process OBI[9526]
Oct 16 14:43:19 Sergiys-iPad com.apple.launchd[1] (UIKitApplication:com.mycompany.OBIQA[0x14dc][9526]) <Warning>: (UIKitApplication:com.mycompany.OBIQA[0x14dc]) Job appears to have crashed: Segmentation fault: 11
Oct 16 14:43:19 Sergiys-iPad com.apple.launchd[1] (UIKitApplication:com.mycompany.OBIQA[0x14dc]) <Notice>: (UIKitApplication:com.mycompany.OBIQA[0x14dc]) Throttling respawn: Will start in 2147483647 seconds
Oct 16 14:43:19 Sergiys-iPad backboardd[28] <Warning>: Application 'UIKitApplication:com.mycompany.OBIQA[0x14dc]' exited abnormally with signal 11: Segmentation fault: 11
Oct 16 14:43:19 Sergiys-iPad SpringBoard[33] <Warning>: Application 'com.mycompany.OBIQA' has failed to launch too many times. Not relaunching.
Oct 16 14:43:19 Sergiys-iPad ReportCrash[9527] <Notice>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/OBI_2013-10-16-144319_Sergiys-iPad.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0

如果有任何帮助或挖掘方向,我将非常高兴

编辑 最后我找到了导致这个异常的原因。构建设置中的symbol striping 选项,在我将它从all symbols 更改为debug symbols 之后,一切都变得很好。

【问题讨论】:

  • 您是否在 applicationDidFinishLaunching 中加载图像?应用程序可能会超时,因为您启动时间过长
  • 感谢您的评论,我会检查这个猜测,但没有任何超时警告左右。你能解释一下你是从哪里得到这个的吗?
  • 添加了更多解释的答案

标签: ios crash


【解决方案1】:

当 iOS 将你的类加载到内存中时,动态加载器会崩溃。此过程的一部分是在实现该方法的任何类上调用 +load。

一种可能是您在 +load 中做的工作过多,并因“未能及时启动”而被杀死。提供完整的崩溃日志将显示是否是这种情况。

【讨论】:

    【解决方案2】:

    ImageLoader 链接到代码片段(外部框架、库)的加载。您应该确保所有这些都可以通过您的二进制文件“看到”。在 XCode 中构建可以将所有内容放在同一个文件夹中,因此您没有路径问题,但是,特别是当您引用第三方框架时,您需要确保它们可以被主可执行文件“看到”。控制台会吐什么吗?

    【讨论】:

    • 感谢您的回复,我添加了控制台。您能否解释一下如何检查该库是否“可见”,有很多第三方框架和库
    【解决方案3】:

    据我所知(如果您显示一些代码会有所帮助,尤其是您的 applicationDidFinishLaunching 方法),您的应用似乎启动时间过长并且被操作系统杀死。

    应用程序有一定的时间限制来设置根视图控制器并进行任何基本设置。如果花费的时间太长,操作系统会认为它没有响应并杀死它。从 Xcode 启动时您不会注意到此问题,因为在附加调试器的情况下启动时已禁用时间限制:请参阅此处https://developer.apple.com/library/ios/qa/qa1592/_index.html

    如果您在应用程序委托中下载图像,我建议您切换到异步方法,并且还可能处理从将使用图像的视图控制器加载的图像

    编辑:您从控制台收到的错误似乎与问答中描述的不同,但没有任何代码,我无能为力

    【讨论】:

    • 感谢您的帮助。我无法提供代码,但我只是在“applicationDidFinishLaunching”方法中设置所有内容(只留下return YES)并像往常一样制作存档。应用程序仍然崩溃并出现相同的异常。
    • 好吧,那可能不是问题所在。没有代码我帮不上什么忙,但我会查看 ImageLoader 类
    • 看起来你误解了ImageLoader,不是我的课,我认为是加载应用程序图像的系统图像加载器,而不是图形图片。
    • 是的,看来你是对的,那么对不起,我对那门课不太了解
    • 此答案中所说的内容与问题中显示的内容无关。为什么它有任何赞成票对我来说是个谜。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多