开发者

Why can’t I run Xcode debugger highlighting the call stack after a crash/exception?

So, when developing, I get a crash when running the app in iPhone simulator. Say something like this in the console...

2010-08-01 19:28:04.228 FakeCreme[32888:207] adding bucket: (null)
2010-08-01 19:28:04.230 FakeCreme[32888:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x02641919 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x0278f5de objc_exception_throw + 47
    2   CoreFoundation                      0x0263b571 -[__NSArrayM insertObject:atIndex:] + 225
    3   CoreFoundation                      0x026369c4 -[__NSArrayM addObject:] + 68
    4   FakeCreme                           0x0000b645 -[BucketsTable didReceiveEvents:withVerb:forDomain:] + 557
    5   FakeCreme                           0x0002e2fa -[EventManager addObject:withVerb:inDomain:] + 3206
    6   FakeCreme                           0x0000a7a8 -[BucketsTable viewDidLoad] + 1389
    7   UIKit                               0x003cac26 -[UIViewController view] + 179
    8   UIKit                               0x003c9050 -[UIViewController contentScrollView] + 42
    9   UIKit                               0x003d8df7 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48
    10  UIKit                               0x003d74ff -[UINavigationController _layoutViewController:] + 43
    11  UIKit                               0x003d8789 -[UINavigationController _startTransition:fromViewController:toViewController:] + 524
    12  UIKit                               0x003d3329 -[UINavigationController _startDeferredTransitionIfNeeded] + 266
    13  UIKit                               0x004ee209 -[UILayoutContainerView layoutSubviews] + 226
    14  QuartzCore                          0x040e50d5 -[CALayer layoutSublayers] + 177
    15  QuartzCore                          0x040e4e05 CALayerLayoutIfNeeded + 220
    16  QuartzCore                          0x040e464c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 302
    17  QuartzCore                          0x040e42b0 _ZN2CA11Transaction6commitEv + 292
    18  UIKit                               0x0032563f -[UIApplication _reportAppLaunchFinished] + 39
    19  UIKit                               0x00325a68 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 545
    20  UIKit                               0x0032f452 -[UIApplication handleEvent:withNewEvent:] + 1958
    21  UIKit                               0x00328074 -[UIApplication sendEvent:] + 71
    22  UIKit                               0x0032cac4 _UIApplicationHandleEvent + 7495
    23  GraphicsServices                    0x02cbbafa PurpleEventCallback + 1578
    24  CoreFoundation                      0x02622dc4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    25  CoreFoundation                      0x02583737 __CFRunLoopDoSource1 + 215
    26  CoreFoundation                      0x025809c3 __CFRunLoopRun + 979
    27  CoreFoundation                      0x02580280 CFRunLoopRunSpecific + 208
    28  CoreFoundation                      0x025801a1 CFRunLoopRunInMode + 97
    29  UIKit                               0x00325226 -[UIApplication _run] + 625
    30  UIKit                               0x00330b58 UIApplicationMain + 1160
    31  FakeCreme                           0x000025a0 main + 102
    32  FakeCreme                           0x00002531 start + 53
    33  ???    开发者_如何学运维                             0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'

(Details of crash don't matter, just an illustration.)

Now, it used to be the case that when I get such a crash, I can run Xcode debugger and get the call trace conveniently loaded there, so that the debugger loads the call stack and I can interactively navigate in the methods that were called just at the time.

But ever since installing Xcode 3.2.3 and/or switching computers, this doesn't work. I load debugger at this point where my app is halted, but it comes up empty, no call stack.

I'm sure there is an Xcode setting I have missed somewhere, but didn't find anything on my own quickly glancing through settings. What do I need to do to get the call stack loaded in debugger at this point?


Sometimes, for some reason the XCode debugger stops in a place where it simply cannot pick up debug values. I've seen it when trying to stop in callbacks for animations. There's not a setting you can really chose to fix this (though you should check you are running in Debugn and not Release, and that debugging symbol generation is still checked in project settings).

You might try using the LLVM debugger in XCode 4.

However, to solve your particular problem - it seems pretty clear you are trying to insert an object into an array in +didReceiveEvents:WithVerb:ForDomain: in BucketsTable, where you are inserting some point too far after the last element in the array. You might try an NSLog around any array insert there with index and object values.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜