6

我的应用程序因以下错误消息而崩溃:

'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
4

3 回答 3

11

添加异常作为断点。假设 Xcode 4+...

  1. 在导航器框架的顶部(您可以在其中查看文件等),您将看到一个看起来像侧向箭头的小图标。
  2. 这将显示断点导航器。在该视图的底部,单击 + 以添加断点。
  3. 单击“添加异常断点...”

默认选项可能很好......您想在抛出所有异常时中断。

现在,当您运行时,您将在应用程序抛出异常的任何地方获得一个断点。

于 2012-05-14T00:31:31.253 回答
1

错误是否发生在您的测试中?您是从 iTunes Connect 的崩溃日志中看到的吗?

如果您能够在本地重现它,请运行该方案以复制错误,当调试器变为活动状态时,在控制台的 (gdb) 提示符处键入“bt”以获取带有行号的堆栈跟踪。

于 2012-05-14T00:26:54.140 回答
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;
}

下次发生错误时,您应该有一些有关崩溃的附加信息。

于 2012-05-14T00:37:18.620 回答