了解XCode调试区域错误消息

时间:2014-05-01 12:51:22

标签: objective-c xcode

例如,我在调试区域中收到此错误:

2014-05-01 05:01:28.052 MyApp[93187:303] *** setObjectForKey: object cannot be nil (key: -1)
2014-05-01 05:01:28.057 MyApp[93187:303] (
    0   CoreFoundation                      0x00007fff8cb3f25c __exceptionPreprocess + 172
    1   libobjc.A.dylib                     0x00007fff89202e75 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff8ca3a46e -[__NSDictionaryM setObject:forKey:] + 1102
    3   MyApp                               0x0000000100009725 +[SystemTools getData:] + 5509
    4   MyApp                               0x0000000100001c4b -[AppDelegate drawCanvas:] + 1467
    5   MyApp                               0x0000000100001675 -[AppDelegate repeatingTimer:] + 85
    6   Foundation                          0x00007fff8ec480f4 __NSFireTimer + 96
    7   CoreFoundation                      0x00007fff8caa6564 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
    8   CoreFoundation                      0x00007fff8caa609f __CFRunLoopDoTimer + 1151
    9   CoreFoundation                      0x00007fff8cb175aa __CFRunLoopDoTimers + 298
    10  CoreFoundation                      0x00007fff8ca618e5 __CFRunLoopRun + 1525
    11  CoreFoundation                      0x00007fff8ca610b5 CFRunLoopRunSpecific + 309
    12  HIToolbox                           0x00007fff875dca0d RunCurrentEventLoopInMode + 226
    13  HIToolbox                           0x00007fff875dc7b7 ReceiveNextEventCommon + 479
    14  HIToolbox                           0x00007fff875dc5bc _BlockUntilNextEventMatchingListInModeWithFilter + 65
    15  AppKit                              0x00007fff907853de _DPSNextEvent + 1434
    16  AppKit                              0x00007fff90784a2b -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 122
    17  AppKit                              0x00007fff90778b2c -[NSApplication run] + 553
    18  AppKit                              0x00007fff90763913 NSApplicationMain + 940
    19  MyApp                               0x0000000100016aa2 main + 34
    20  libdyld.dylib                       0x00007fff9440b5fd start + 1
    21  ???                                 0x0000000000000003 0x0 + 3
)

不幸的是,我有几个" setObject:forKey:"调用" SystemTools getData:"功能。

如何确定此错误与哪个调用相关?这个数字(加号后)意味着什么?

3 个答案:

答案 0 :(得分:2)

在断点中添加Execption breakpoint。这将停止导致应用程序崩溃的代码行。这样你就不必使用NSLogs进行调试。

  

Xcode的默认行为是停止异常的位置   抓住了,而不是引发异常的地方!

要解释崩溃日志中的这些行: 来自Ray Wenderlich's blog

  

2 XYZLib 0x34648e88 0x83000 + 8740

基本上是四列:

  • 帧编号 - 在本例中为2。
  • 二进制文件的名称 - 在本例中为XYZLib。
  • 被调用的函数的地址 - 在本例中为0x34648e88。
  • 第四列分为两个子列,一个基地址和一个偏移量。这里是0×83000 + 8740,其中第一个数字指向文件,第二个数字指向该文件中的代码行。

答案 1 :(得分:1)

在所有setObject:forKey调用中使用断点。使用NSLog在日志中打印一些有用的信息。您是开发人员,因此您还需要了解调试。

答案 2 :(得分:0)

输出的第一行在这里很有用:

setObjectForKey: object cannot be nil (key: -1)

NSDictionary不喜欢nil值,所以在你的getData方法中寻找一个可以为键值“-1”赋值的地方。

祝你好运!