我的应用程序因此错误消息而崩溃:
' NSInvalidArgumentException',原因:' - [__ NSCFDictionary setObject:forKey:]:尝试插入nil值(键:0)'
我试图找到我的代码中出现的位置。我已经在环境变量中设置了NSZombiesEnabled,但是要弄清楚它的位置非常困难。关于如何调试的任何想法?
我输入了bt,这是我看到的:
frame #0: 0x30d1832c libsystem_kernel.dylib`__pthread_kill + 8
frame #1: 0x3597d20e libsystem_c.dylib`pthread_kill + 54
frame #2: 0x3597629e libsystem_c.dylib`abort + 94
frame #3: 0x35055f6a libc++abi.dylib`abort_message + 46
frame #4: 0x3505334c libc++abi.dylib`_ZL17default_terminatev + 24
frame #5: 0x36c38356 libobjc.A.dylib`_objc_terminate + 146
frame #6: 0x350533c4 libc++abi.dylib`_ZL19safe_handler_callerPFvvE + 76
frame #7: 0x35053450 libc++abi.dylib`std::terminate() + 20
frame #8: 0x35054824 libc++abi.dylib`__cxa_rethrow + 88
frame #9: 0x36c382a8 libobjc.A.dylib`objc_exception_rethrow + 12
frame #10: 0x3428d50c CoreFoundation`CFRunLoopRunSpecific + 404
frame #11: 0x3428d36c CoreFoundation`CFRunLoopRunInMode + 104
frame #12: 0x3826f438 GraphicsServices`GSEventRunModal + 136
frame #13: 0x36d27cd4 UIKit`UIApplicationMain + 1080
frame #14: 0x00051cdc AppName`main + 80 at main.m:16
答案 0 :(得分:9)
将异常添加为断点。假设Xcode 4 + ...
默认选项可能很好......你想要抛弃所有异常。
现在,当您运行时,您将在应用程序抛出异常的任何地方获得断点。
答案 1 :(得分:1)
您的测试中是否发生错误?你是从iTunes Connect的崩溃日志中看到的吗?
如果您能够在本地重现它,请运行方案以复制错误,并在调试器变为活动状态时,在控制台的(gdb)提示符下键入“bt”以获取包含行号的堆栈跟踪。
答案 2 :(得分:1)
尝试在AppDelegate中添加这部分代码:
void uncaughtExceptionHandler(NSException *exception);
void uncaughtExceptionHandler(NSException *exception) {
NSLog(@"CRASH: %@", exception);
NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
// your previous code here
return YES;
}
下次出现错误时,您应该在崩溃时获得一些额外的信息。