应用程序崩溃并显示EXC_SOFTWARE / UNCAUGHT_NS_EXCEPTION错误

4
我一直在收到Firebase崩溃报告,但我不确定是什么导致了崩溃。我尝试在Xcode中测试,但无法复制该错误,但这个崩溃会影响几个不同的用户,所以我知道这不是一个单独设备特定的崩溃。以下是关于崩溃发生时发生的情况的所有信息。然而,显然由于这是通过Firebase的崩溃报告报告的,我只有这么多信息。
  1. 所有崩溃都来自某种iPad设备,这可能是巧合。
  2. 我可以从事件日志中看出,不同用户的不同屏幕上发生了相同的崩溃,因此崩溃可能在AppDelegate类中的某个位置,但我不确定什么样的问题只会偶尔发生像这个崩溃。
  3. 在崩溃跟踪中,我唯一认识的是我编写的代码的main (AppDelegate.swift:15),但我的AppDelegate文件中第五行只是AppDelegate类声明,如下所示:class AppDelegate: UIResponder, UIApplicationDelegate {
因此,我不确定这部分有什么问题。
如果您认为有任何特定信息与崩溃有关,请告诉我,我将尽力提供可能的信息。
崩溃跟踪:
Exception name: EXC_SOFTWARE / UNCAUGHT_NS_EXCEPTION

1
CoreFoundation
__exceptionPreprocess + 1224112
2
libobjc.A.dylib
objc_exception_throw + 32636
3
UIKit
-[UIPopoverPresentationController presentationTransitionWillBegin] + 9835108
4
UIKit
__71-[UIPresentationController _initViewHierarchyForPresentationSuperview:]_block_invoke + 3628972
5
UIKit
__56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 3621060
6
UIKit
_runAfterCACommitDeferredBlocks + 2912452
7
UIKit
_cleanUpAfterCAFlushAndRunDeferredBlocks + 2968188
8
UIKit
_afterCACommitHandler + 26016
9
CoreFoundation
__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 919332
10
CoreFoundation
__CFRunLoopDoObservers + 910536
11
CoreFoundation
__CFRunLoopRun + 911608
12
CoreFoundation
CFRunLoopRunSpecific + 35916
13
GraphicsServices
GSEventRunModal + 49284
14
UIKit
UIApplicationMain + 516228
15
Poker
main (AppDelegate.swift:15)
16
libdyld.dylib
start + 10420

你能发一下断点指向的代码吗? - aircraft
@aircraft main (AppDelegate.swift:15) 只是指向 AppDelegate 类声明,所以那里没有什么有趣的事情发生。 - James Stonehill
我不得不补充一下@Jay等人的所有评论:在添加(有点粗鲁的)评论之前,请下次先仔细阅读问题。如果问题是如何找到代码,错误隐藏在哪里,当只有给定的调用跟踪可用时,要求看到不可能的东西是没有意义的。 - marco
@marco 请阅读在这里可以问什么话题,特别是第一条,这个问题很明显符合该条款。然后阅读如何创建一个最小、完整和可验证的示例。我们会仔细阅读问题并尽可能地提供帮助。但是,根据上面的链接,这个问题超出了本论坛的范围,因为它不是“可复制”的。我们需要足够的信息来提供帮助,但目前提供的信息不足,所以我们要求更多的信息。 - Jay
@Jay 好的,谢谢您提供的链接,对我这样的人来说很有帮助。我不应该滥用评论作为聊天工具。所以,就我的问题讨论而言:在我看来,问题询问了“程序员常用的软件工具”,并且指定了需要调试帮助的具体内容,这足够让我花费数小时的时间发现答案,并且该答案可能会对提问者有所帮助。如果您想通过给我的答案评分来进行权力游戏,那就这样吧。没有什么恶意。只是有点难过,因为诚实、有帮助的回答却导致了这样的结果。 - marco
显示剩余12条评论
1个回答

0

我有一个类似的问题,这只是一个部分答案。

正如其他人已经在评论中建议的那样,AppDelegate只是靠近调用链的根源,导致了你的问题。当系统尝试执行_initViewHierarchyForPresentationSuperview时,问题就一直出现在那个链条上。

自然而然地,你对于导致问题的代码行感兴趣。那些很可能在报告的UIKit相关的调用行之间的某个地方。我不知道如何直接使用给定的堆栈跟踪来找到导致问题的你(或我的)代码的根源。

但是,我知道如何更接近这些行。我遇到了一个意外的NSException,在Firebase Crash reporting中显示了一个类似于你的加密调用堆栈和顶部消息的信息:

enter image description here

点击屏幕截图中的上传链接会出现以下内容: enter image description here

通过遵循 Firebase 的 说明 并进行了相当多的研究,我成功获取了与应用程序版本相关的 dSYMS 符号文件(我正在使用 Bitcode,这使事情变得有些复杂;最终我去了 iTunes Connect 并在应用程序的“活动”部分中执行了“下载 dSYMS”操作),我成功上传了正确的符号文件。(在本地机器上执行 mdfind "com_apple_xcode_dsym_uuids == *" 以查看您是否已经有所需的 UUID 标识的符号文件。)
Firebase 显示的调用堆栈如下: enter image description here

下一次出现问题时(我刚刚收到Firebase的相应电子邮件),我看到了这个: {{link1:enter image description here}}
我现在唯一的问题是:似乎引起问题的代码非常简单,在本地测试中不会引起任何问题。它只是显示一些文本视图,用于手动点击和验证静态行数。
我现在正在尝试将代码包装在do { ... } catch let error { ... }中,以便在未来上传的应用程序版本中使用它捕获内部错误,并通过Firebase错误报告报告错误消息和其他一些详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接