如何在xcode中通过调用堆栈查找相关代码?

时间:2017-02-09 09:21:48

标签: ios objective-c xcode debugging

有,

我是ios的新手,并按如下方式获取崩溃日志。

我的问题是,“+ 373”在“[ICLRootViewController addHomeScreenViewController] + 373”中是什么意思?如何在ICLRootViewController.m中找到相关的行?第373行与函数addHomeScreenViewController()完全无关。

2017-02-09 16:23:28.117 Demo[98834:4764956] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't find view controller.'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000111f77d4b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x0000000110dfb21e objc_exception_throw + 48
    2   CoreFoundation                      0x0000000111f7be42 +[NSException raise:format:arguments:] + 98
    3   Foundation                          0x000000010cda066d -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
    4   Demo                               0x0000000109bb63c5 -[ICLRootViewController addHomeScreenViewController] + 373
    5   Demo                               0x0000000109bc252e -[ICLRootViewController onNewsButtonClicked] + 542
    6   Demo                               0x0000000109a2b9ce __51-[ICLHomeScreenToolbarViewController initWebToolbar]_block_invoke_2 + 62
    7   Demo                               0x0000000109dee0f1 -[ICLWebViewToolbar didClickNewsButton:] + 305
    8   UIKit                               0x000000010f5b18bc -[UIApplication sendAction:to:from:forEvent:] + 83
    9   UIKit                               0x000000010f737c38 -[UIControl sendAction:to:forEvent:] + 67
    10  UIKit                               0x000000010f737f51 -[UIControl _sendActionsForEvents:withEvent:] + 444
    11  UIKit                               0x000000010f736e4d -[UIControl touchesEnded:withEvent:] + 668
    12  UIKit                               0x000000010f61f545 -[UIWindow _sendTouchesForEvent:] + 2747
    13  UIKit                               0x000000010f620c33 -[UIWindow sendEvent:] + 4011
    14  Demo                               0x0000000109a96a80 -[ICLInteractionDetectionWindow sendEvent:] + 688
    15  UIKit                               0x000000010f5cd9ab -[UIApplication sendEvent:] + 371
    16  UIKit                               0x000000010fdba72d __dispatchPreprocessedEventFromEventQueue + 3248
    17  UIKit                               0x000000010fdb3463 __handleEventQueue + 4879
    18  CoreFoundation                      0x0000000111f1c761 __CFRUNLOICL_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    19  CoreFoundation                      0x0000000111f0198c __CFRunLoopDoSources0 + 556
    20  CoreFoundation                      0x0000000111f00e76 __CFRunLoopRun + 918
    21  CoreFoundation                      0x0000000111f00884 CFRunLoopRunSpecific + 420
    22  GraphicsServices                    0x000000011473ba6f GSEventRunModal + 161
    23  UIKit                               0x000000010f5afc68 UIApplicationMain + 159
    24  Demo                               0x000000010981da1f main + 111
    25  libdyld.dylib                       0x0000000113ccd68d start + 1

非常感谢!

2 个答案:

答案 0 :(得分:0)

  • 373是从回溯中列出的函数符号的开头的偏移量。崩溃记者无法访问调试信息,因此无法从地址到源代码行进行翻译。

但是,如果你有二进制文件表现出这次崩溃,那么你可以手动解决这个问题。由于macOS和iOS随机化了加载位置,因此您无法从崩溃中的绝对地址中分辨出任何内容。这就是为什么把它放在"符号+偏移"形式很方便。所以,加载你的二进制文件& dSYM进入调试器并执行:

(lldb) disassemble -m -n "-[ICLRootViewController addHomeScreenViewController]"

该命令将反汇编传递给-n参数的函数的代码,显示混合源和&amp;该方法的装配视图。程序集输出将与偏移一起列出,因此只需查找<+373>,其上方的源代码行将显示它的来源。如果这是优化代码,则源 - &gt;地址映射有时会令人困惑,但混合视图可能会帮助您对其进行排序。

答案 1 :(得分:-3)

也许你可以在第4行找到答案,

4   Demo                               0x0000000109bb63c5 -[ICLRootViewController addHomeScreenViewController] + 373

项目中最后一个运行

的代码在哪里