Objective c 应用程序在设备上启动时崩溃,但在模拟器上运行正常
我的应用程序在模拟器中运行良好,但在设备上崩溃。我如何找出是什么导致它在设备上崩溃 事故日志:Objective c 应用程序在设备上启动时崩溃,但在模拟器上运行正常,objective-c,ios,xcode,Objective C,Ios,Xcode,我的应用程序在模拟器中运行良好,但在设备上崩溃。我如何找出是什么导致它在设备上崩溃 事故日志: 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.ma
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
您在模拟器和设备中运行的目标是否相同?如果是这样,只需尝试以下操作即可开始调试:
@try {
retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([YOUR-AppDelegate-HERE class]));
}
@catch (NSException *exception) {
NSLog(@"Exception - %@",[exception description]);
exit(EXIT_FAILURE);
}
将它放在main.m文件中,这样每当您没有捕获到异常时,它就会冒泡到main文件中,在不让您知道发生了什么情况的情况下,它不会使它崩溃。您在模拟器和设备中运行的是同一个目标吗?如果是这样,只需尝试以下操作即可开始调试:
@try {
retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([YOUR-AppDelegate-HERE class]));
}
@catch (NSException *exception) {
NSLog(@"Exception - %@",[exception description]);
exit(EXIT_FAILURE);
}
将它放在main.m文件中,这样每当您没有捕获到异常时,它就会冒泡到main,在不让您知道发生了什么情况的情况下,它不会使它崩溃。尝试从设备中删除该应用程序。还有,我们谈论的是什么设备(iPhone3GS、4、4s、iPad、iTouch(新一代?)等等 如果删除应用程序没有解决任何问题,我会检查以下事项(假设您通过Xcode在设备上运行应用程序):
ApplicationIDFinishLaunchingWithOptions
方法中放入NSLog语句。这至少会告诉您springboard是否成功启动了应用程序ApplicationIDFinishLaunchingWithOptions
中执行的任何操作开始设置断点,然后逐步执行代码,直到应用程序崩溃。这将为您提供集中故障排除的位置。您也可以在pla中使用NSLog语句设置断点的位置尝试从您的设备中删除应用程序。另外,我们谈论的是什么设备(iPhone3GS、4、4s、iPad、iTouch(新一代?)等 如果删除应用程序没有解决任何问题,我会检查以下事项(假设您通过Xcode在设备上运行应用程序):
ApplicationIDFinishLaunchingWithOptions
方法中放入NSLog语句。这至少会告诉您springboard是否成功启动了应用程序ApplicationIDFinishLaunchingWithOptions
中执行的任何操作开始设置断点,然后逐步执行代码,直到应用程序崩溃。这将为您提供集中故障排除的位置。您也可以在pla中使用NSLog语句设置断点的位置此崩溃发生在您的应用程序启动之前,即在调用代理的ApplicationIDFinishLaunchingWithOptions方法之前 尝试:
此崩溃发生在您的应用程序启动之前,即在调用代理的ApplicationIDFinishLaunchingWithOptions方法之前 尝试:
你能在代码中找到它崩溃的确切位置吗(即使用制动点)?你试过重新启动你的设备吗?检查:你正在用Xcode在设备上调试吗?如果是,它应该指出它崩溃的地方…0x373a332c:blo 0x373a3344;u pthread_kill+32在这种情况下我会做的随机事情:删除设备中的应用程序,关闭设备,再次打开它,然后运行应用程序d对我来说……也许你可以试一下……你能在代码中找到它崩溃的确切位置吗(例如使用制动点)?你试过重新启动你的设备吗?检查:你正在用Xcode在设备上调试吗?如果是,它应该指出它崩溃的地方…0x373a332c:blo 0x373a3344;u pthread_kill+32在这种情况下我会做的随机事情:删除设备中的应用程序,关闭设备,再次打开它,然后运行应用程序d对我来说..也许你可以尝试一下..控制台显示了什么吗?控制台显示了什么吗?NSLog在ApplicationIDFinishLaunchingWithOptions中不起作用。行内崩溃:返回UIApplicationMain(argc,argv,nil,NSStringFromClass([AIAppDelegate class]));NSLog在ApplicationIDFinishLaunchingWithOptions中有效。它必须在return语句之前。最好将其放在方法的顶部。NSLog在ApplicationIDFinishLaunchingWithOptions中无效。行内崩溃:return UIApplicationMain(argc、argv、nil、NSStringFromClass([AIAppDelegate class]);NSLog在ApplicationIDFinishLaunchingWithOptions中有效。它必须在return语句之前。最好放在方法的顶部。