美文网首页Bug调试
iOS调试,找出错误代码所在位置

iOS调试,找出错误代码所在位置

作者: 5a3830ede979 | 来源:发表于2016-06-23 10:17 被阅读319次

    转帖 http://www.starfelix.com/blog/2014/03/17/lldbdiao-shi-ming-ling-chu-tan/

    其中的一部分

    image 命令可用于寻址,有多个组合命令。比较实用的用法是用于寻找栈地址对应的代码位置。 下面我写了一段代码

    NSArray *arr=[[NSArray alloc] initWithObjects:@"1",@"2", nil];
    NSLog(@"%@",arr[2]);
    

    这段代码有明显的错误,程序运行这段代码后会抛出下面的异常:

    *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
    *** First throw call stack:
    (
      0   CoreFoundation                      0x0000000101951495 __exceptionPreprocess + 165
      1   libobjc.A.dylib                     0x00000001016b099e objc_exception_throw + 43
      2   CoreFoundation                      0x0000000101909e3f -[__NSArrayI objectAtIndex:] + 175
      3   ControlStyleDemo                    0x0000000100004af8 -[RootViewController viewDidLoad] + 312
      4   UIKit                               0x000000010035359e -[UIViewController loadViewIfRequired] + 562
      5   UIKit                               0x0000000100353777 -[UIViewController view] + 29
      6   UIKit                               0x000000010029396b -[UIWindow addRootViewControllerViewIfPossible] + 58
      7   UIKit                               0x0000000100293c70 -[UIWindow _setHidden:forced:] + 282
      8   UIKit                               0x000000010029cffa -[UIWindow makeKeyAndVisible] + 51
      9   ControlStyleDemo                    0x00000001000045e0 -[AppDelegate application:didFinishLaunchingWithOptions:] + 672
      10  UIKit                               0x00000001002583d9 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 264
      11  UIKit                               0x0000000100258be1 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1605
      12  UIKit                               0x000000010025ca0c -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 660
      13  UIKit                               0x000000010026dd4c -[UIApplication handleEvent:withNewEvent:] + 3189
      14  UIKit                               0x000000010026e216 -[UIApplication sendEvent:] + 79
      15  UIKit                               0x000000010025e086 _UIApplicationHandleEvent + 578
      16  GraphicsServices                    0x0000000103aca71a _PurpleEventCallback + 762
      17  GraphicsServices                    0x0000000103aca1e1 PurpleEventCallback + 35
      18  CoreFoundation                      0x00000001018d3679 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
      19  CoreFoundation                      0x00000001018d344e __CFRunLoopDoSource1 + 478
      20  CoreFoundation                      0x00000001018fc903 __CFRunLoopRun + 1939
      21  CoreFoundation                      0x00000001018fbd83 CFRunLoopRunSpecific + 467
      22  UIKit                               0x000000010025c2e1 -[UIApplication _run] + 609
      23  UIKit                               0x000000010025de33 UIApplicationMain + 1010
      24  ControlStyleDemo                    0x0000000100006b73 main + 115
      25  libdyld.dylib                       0x0000000101fe95fd start + 1
      26  ???                                 0x0000000000000001 0x0 + 1
    )
    libc++abi.dylib: terminating with uncaught exception of type NSException
    

    现在,我们怀疑出错的地址是0x0000000100004af8(可以根据执行文件名判断,或者最小的栈地址)。为了进一步精确定位,我们可以输入以下的命令:

    image lookup --address 0x0000000100004af8
    // 缩写
    // im loo -a  0x0000000100004af8
    

    命令执行后返回:

    Address: ControlStyleDemo[0x0000000100004af8] (ControlStyleDemo.__TEXT.__text + 13288)
    Summary: ControlStyleDemo`-[RootViewController viewDidLoad] + 312 at RootViewController.m:53
    

    我们可以看到,出错的位置是RootViewController.m的第53行。

    相关文章

      网友评论

        本文标题:iOS调试,找出错误代码所在位置

        本文链接:https://www.haomeiwen.com/subject/xobndttx.html