那里,

我是ios的新手,并收到如下的崩溃日志。

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

2017-02-09 16:23:28.117 Demo [98834:4764956] ***由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“找不到视图控制器。”
***首先抛出调用堆栈:

    0 CoreFoundation 0x0000000111f77d4b __exceptionPreprocess + 171
    1个libobjc.A.dylib 0x0000000110dfb21e objc_exception_throw + 48
    2 CoreFoundation 0x0000000111f7be42 + [NSException提高:格式:参数:] + 98
    3 Foundation 0x000000010cda066d-[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
    4演示0x0000000109bb63c5-[ICLRootViewController addHomeScreenViewController] + 373
    5演示0x0000000109bc252e-[ICLRootViewController onNewsButtonClicked] + 542
    6演示0x0000000109a2b9ce __51- [ICLHomeScreenToolbarViewController initWebToolbar] _block_invoke_2 + 62
    7演示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演示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个演示0x000000010981da1f主+ 111
    25 libdyld.dylib 0x0000000113ccd68d开始+ 1


非常感谢!

最佳答案

373是回溯中列出的功能符号开头的偏移量。崩溃报告程序无权访问调试信息,因此无法执行从地址到源代码行的转换。


但是,如果您的二进制文件出现了此崩溃,并且它是dSYM,则可以手动解决。由于macOS和iOS会随机加载位置,因此您将无法从崩溃的绝对地址中得知任何信息。这就是为什么以“符号+偏移”形式使用它很方便。因此,将您的二进制文件和dSYM加载到调试器中并执行以下操作:

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


该命令将反汇编传递给-n参数的函数的代码,显示此方法的混合源代码和汇编视图。程序集输出将列出偏移量,因此只需找到<+373>,其上方的源代码行将向您显示其来源。如果这是经过优化的代码,则源->地址映射有时可能会造成混淆,但是混合视图也可以帮助您进行分类。

关于ios - 如何通过xcode中的调用堆栈查找相关代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42132658/

10-16 21:10