【问题标题】:how to find related code by call stack in xcode?如何通过xcode中的调用堆栈找到相关代码?
【发布时间】:2017-06-27 05:22:44
【问题描述】:

那里,

我是ios新手,得到一个崩溃日志如下。

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

2017-02-09 16:23:28.117 演示 [98834:4764956] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“找不到视图控制器。” *** 首先抛出调用堆栈: ( 0 核心基础 0x0000000111f77d4b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x0000000110dfb21e objc_exception_throw + 48 2 CoreFoundation 0x0000000111f7be42 + [NSException raise:format:arguments:] + 98 3 基础 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 发送事件:] + 4011 14 演示 0x0000000109a96a80 -[ICLInteractionDetectionWindow sendEvent:] + 688 15 UIKit 0x000000010f5cd9ab-[UIApplication sendEvent:] + 371 16 UIKit 0x000000010fdba72d __dispatchPreprocessedEventFromEventQueue + 3248 17 UIKit 0x000000010fdb3463 __handleEventQueue + 4879 18 核心基础 0x0000000111f1c761 __CFRUNLOICL_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 19 核心基础 0x0000000111f0198c __CFRunLoopDoSources0 + 556 20 核心基础 0x0000000111f00e76 __CFRunLoopRun + 918 21 核心基础 0x0000000111f00884 CFRunLoopRunSpecific + 420 22 图形服务 0x000000011473ba6f GSEventRunModal + 161 23 UIKit 0x000000010f5afc68 UIApplicationMain + 159 24 演示 0x000000010981da1f 主要 + 111 25 libdyld.dylib 0x0000000113ccd68d 开始 + 1

非常感谢!

【问题讨论】:

  • 原因:'找不到视图控制器。'
  • 你想做什么??
  • @AbhishekGupta 嗯,我的意思是如何追溯崩溃日志,并找到导致此崩溃的代码行。
  • 在执行操作的地方使用调试器。

标签: ios objective-c xcode debugging


【解决方案1】:
  • 373 是从回溯中列出的函数符号开头的偏移量。崩溃报告者无权访问调试信息,因此无法进行从地址到源行的转换。

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

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

该命令将反汇编传递给-n 参数的函数的代码,显示此方法的混合源代码和汇编视图。汇编输出将与偏移量一起列出,所以只需找到<+373>,它上面的源代码行就会告诉你它来自哪里。如果这是经过优化的代码,源 -> 地址映射有时会令人困惑,但混合视图也可以帮助您解决问题。

【讨论】:

    【解决方案2】:

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

    4   Demo                               0x0000000109bb63c5 -[ICLRootViewController addHomeScreenViewController] + 373

    项目中最后运行的代码在哪里

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      相关资源
      最近更新 更多