应用程序在启动时立即崩溃,仅在设备上

Posted

技术标签:

【中文标题】应用程序在启动时立即崩溃,仅在设备上【英文标题】:App crashing immediately on start up, on device only 【发布时间】:2013-04-04 09:35:29 【问题描述】:

我试图弄清楚为什么我正在开发的应用程序在我的设备(运行 ios 6.1 的 iPhone 4)上运行时立即开始崩溃。我已经在这个应用程序上工作了大约 8 周,这个问题似乎突然出现了。

当我在模拟器上运行该应用程序时,它运行良好。当我尝试在我的设备上运行它时,它会崩溃,并在以下位置中断:

int main(int argc, char *argv[])

    @autoreleasepool 
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    

崩溃发生在 AppDelegate 方法之前

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

被调用。

我查看了设备崩溃日志,但没有看到任何可以让我了解正在发生的事情的线索。有谁知道我可以从哪里开始寻找解决方案?值得一提的是,这里是崩溃日志:

异常类型:EXC_CRASH (SIGABRT) 异常代码: 0x0000000000000000, 0x0000000000000000 线程崩溃:0

线程 0 名称:调度队列:com.apple.main-thread 线程 0 崩溃:0 libsystem_kernel.dylib 0x39e74350 __pthread_kill + 8 1 libsystem_c.dylib 0x39deb11e pthread_kill + 54 2 libsystem_c.dylib 0x39e2796e 中止 + 90 3 图形服务 0x357da9ce GSRegisterPurpleNamedPort + 210 4 图形服务 0x357da684 _GSEventInitialize + 92 5 UIKit 0x33b2d0c8 UIApplicationMain + 552 6 CK-Ranker 0x000bbaf4 主 (main.m:16) 7 CK-Ranker 0x000bba7c 开始 + 36

线程 1:0 libsystem_kernel.dylib 0x39e74d98 __workq_kernreturn + 8 1 libsystem_c.dylib 0x39dc2cf6 _pthread_workq_return + 14 2 libsystem_c.dylib 0x39dc2a12 _pthread_wqthread + 362 3 libsystem_c.dylib 0x39dc28a0 start_wqthread + 4

线程 2 名称:调度队列:com.apple.libdispatch-manager 线程 2:0 libsystem_kernel.dylib 0x39e64648 kevent64 + 24 1 libdispatch.dylib 0x39d9d4ec _dispatch_mgr_invoke + 792 2 libdispatch.dylib 0x39d8fdf4 _dispatch_mgr_thread$VARIANT$up + 32

线程 3:0 libsystem_kernel.dylib 0x39e74d98 __workq_kernreturn + 8 1 libsystem_c.dylib 0x39dc2cf6 _pthread_workq_return + 14 2 libsystem_c.dylib 0x39dc2a12 _pthread_wqthread + 362 3 libsystem_c.dylib 0x39dc28a0 start_wqthread + 4

线程 4 名称:WebThread 线程 4:0 libsystem_kernel.dylib 0x39e63eb4 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x39e64048 mach_msg + 36 2 核心基础 0x31ca6040 __CFRunLoopServiceMachPort + 124 3 核心基础 0x31ca4d9e __CFRunLoopRun + 878 4 核心基础 0x31c17eb8 CFRunLoopRunSpecific + 352 5 核心基础 0x31c17d44 CFRunLoopRunInMode + 100 6 WebCore 0x37c16500 RunWebThread(void*) + 440 7 libsystem_c.dylib 0x39dcd30e _pthread_start + 306 8 libsystem_c.dylib 0x39dcd1d4 thread_start + 4

线程 0 因 ARM 线程状态(32 位)而崩溃: r0:0x00000000 r1:0x00000000 r2:0x00000000 r3:0x3b92d534 r4:0x00000006 r5:0x3b92db88 r6:0x3b933ff4 r7:0x2fd46c48 r8:0x1ed7a570 r9:0x001844f0 r10:0x00000000 r11:0x00000000 ip: 0x00000148 sp: 0x2fd46c3c lr: 0x39deb123 pc: 0x39e74350 cpsr: 0x00000010

我正在运行启用了 ARC 的 Xcode 4.6.1。

【问题讨论】:

必须尝试从设备中删除应用程序吗? 是的,对不起,我忘了提,我已经尝试从设备中删除应用程序,进行清理,重新启动 Xcode,然后重新启动计算机。 你修改main方法了吗?你有任何可以在初始化期间运行的代码吗?例如+load,c++构造函数 我的主要方法就是我发布的。据我所知,我没有任何其他在初始化期间运行的特殊代码。 【参考方案1】:

您需要提供更多代码或说明您的应用在启动时会做什么。

但从崩溃日志中可以清楚地看出,主 UI 线程的 Thread0 已被杀死。这可能是因为在设备上有一个名为watchdog 的进程,它会杀死任何看起来可疑的进程。比如占用太多内存或花费太多时间在应用程序启动时显示第一个屏幕以及“Apple”认为会影响用户体验的其他事情。所以...

【讨论】:

看门狗定时器似乎很可能在这里,因为模拟器上的超时时间比设备长得多...... 是的,我对看门狗很熟悉,但是我的应用在调用 didFinishLoading 方法之前就被杀死了。我可以发布什么代码?在达到这一点之前,我的应用实际上在做什么?我找不到被调用的代码的任何部分。另外,我没有看到 0x8BADF00D 错误代码。此外,应用程序在几秒钟内崩溃得非常快。 如果您的代码在启动时在main 中断,看起来它甚至还没有开始执行您的代码。在那之前出了点问题。我想知道你在应用程序启动时在做什么。尤其是ViewController 您将实现插入您的AppDelegate 应用程序在我的任何视图控制器代码被调用之前就崩溃了。在启动时,情节提要指向 PKRevealController (github.com/pkluz/PKRevealController) 一个模仿“Facebook”风格主页的类。在应用程序崩溃之前,我的任何内容视图控制器都没有被初始化,并且在应用程序崩溃之前没有调用任何 PKRevealController 代码方法。 它不是看门狗,因为它在连接到 xcode 调试器的调试版本中被禁用【参考方案2】:

事实证明我的设备有问题。我重置了我的设备,崩溃消失了。以后我一定会记得在遇到此崩溃时尝试重置我的设备。

【讨论】:

以上是关于应用程序在启动时立即崩溃,仅在设备上的主要内容,如果未能解决你的问题,请参考以下文章

React Native 应用程序在 iOS TestFlight 上立即崩溃

基于 Qt 的 android 应用程序在一台特定设备上启动时崩溃。 “dlopen 失败:libqtforandroid”

应用程序启动后立即崩溃

Expo React Native Bare 发布 APK 在启动时立即崩溃

iPad应用程序仅在设备上而不是在模拟器中加载笔尖时崩溃

Facebook iOS SDK:应用程序在以“未找到符号:_ACFacebookAppIdKey”开始后立即崩溃。仅在 iOS 5 中