【问题标题】:App Crashes at startup on Device but is fine on Simulator应用程序在设备上启动时崩溃,但在模拟器上很好
【发布时间】:2012-04-01 10:13:41
【问题描述】:

我的应用在模拟器中运行良好,但在设备上崩溃。如何找出导致它在设备上崩溃的原因?

崩溃日志:

OS Version:      iPhone OS 5.1 (9B176)
Report Version:  104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x373a332c __pthread_kill + 8
1   libsystem_c.dylib               0x339b8208 pthread_kill + 48
2   libsystem_c.dylib               0x339b1298 abort + 88
3   GraphicsServices                0x30bfd87c GSRegisterPurpleNamedPort + 188
4   GraphicsServices                0x30bfe2bc GSEventInitialize + 64
5   UIKit                           0x36e6cc5a UIApplicationMain + 534
6   AppleIns HD                     0x00078bd6 0x77000 + 7126
7   AppleIns HD                     0x00078b80 0x77000 + 7040

【问题讨论】:

  • 您是否能够在代码中找到崩溃的确切行(即带有刹车点)?
  • 您是否尝试过重启设备?签出:stackoverflow.com/questions/3589631/…
  • 您是否在使用 Xcode 在设备上进行调试?如果是,它应该指出它崩溃的行...
  • 0x373a332c: blo 0x373a3344 ; __pthread_kill + 32
  • 我在这种情况下做的随机事情:删除设备中的应用程序,关闭设备,再次打开它,然后运行应用程序。它对我有用..也许你可以试一试......

标签: objective-c ios xcode


【解决方案1】:

尝试从您的设备中删除该应用程序。另外,我们在谈论什么设备(iPhone 3GS、4、4s、iPad、iTouch(一代?)等。

如果删除应用程序没有解决任何问题,我会检查以下内容(假设您通过 Xcode 在设备上运行应用程序):

  1. 在 AppDelegate 的 applicationDidFinishLaunchingWithOptions 方法中放置一个 NSLog 语句。这至少会告诉你 springboard 是否成功启动了应用。
  2. 确保您没有设置任何图形文件(初始屏幕图像、故事板、Nib 文件、UI 元素等),这些文件仅适用于 Retina 显示器或不是为运行它的设备而设计的。
    1. 如果执行该 NSLog 语句,则从您在 applicationDidFinishLaunchingWithOptions 中执行的任何操作开始放置断点,然后逐步执行代码,直到应用程序崩溃。这应该为您提供需要集中故障排除的地方。您还可以使用 NSLog 语句代替断点。

【讨论】:

  • NSLog 在 applicationDidFinishLaunchingWithOptions 中不起作用。
  • 行内崩溃:返回 UIApplicationMain(argc, argv, nil,NSStringFromClass([AIAppDelegate class]));
  • NSLog 在 applicationDidFinishLaunchingWithOptions 中确实有效。它必须在 return 语句之前。最好的放置位置是方法的顶部。
【解决方案2】:

你在模拟器和设备上运行在同一个目标上吗?如果是这样,只需尝试以下操作即可开始调试:

@try {
    retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([YOUR-AppDelegate-HERE class]));
}
@catch (NSException *exception) {
    NSLog(@"Exception - %@",[exception description]);
    exit(EXIT_FAILURE);
}

将它放在你的 main.m 文件中,这样当你没有捕捉到异常时,它就会冒泡到主文件中,它不会在不让你知道发生了什么的情况下让它崩溃。

【讨论】:

  • 控制台显示了什么?
【解决方案3】:

此崩溃发生在您的应用启动之前,即。在调用委托的 applicationDidFinishLaunchingWithOptions 方法之前。

试试:

  1. 正在重新启动您的设备。
  2. 断开并重新连接您的设备。
  3. 正在重新启动您的计算机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2014-02-19
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2015-07-26
    相关资源
    最近更新 更多