Xcode 调试器不再显示违规行,而是始终显示 UIApplicationMain

Posted

技术标签:

【中文标题】Xcode 调试器不再显示违规行,而是始终显示 UIApplicationMain【英文标题】:Xcode debugger no longer shows offending line, rather always UIApplicationMain 【发布时间】:2015-09-28 00:34:36 【问题描述】:

我不知道我的设置发生了什么变化,但以前当我的 (Swift) 代码崩溃时,调试器会显示有问题的源代码行。

现在无论出现什么问题,调试器只会突出显示 AppDelegate.swift 中定义 UIApplicationMain 的行。

我可以通过在代码中或多或少地放入打印语句来判断问题出现的位置,但是...如果调试器从不传达任何信息并且我只需要做所有“老派”的事情,那么它的意义何在使用 print 语句 - 特别是如果有异步进程正在进行,其中 print 语句不是发生崩溃的可靠指标?

我在几年前就看到过有关进入“首选项 -> 行为”并修改代码意外退出时显示的内容的线程。但是(a)我过去从来不需要这个,更重要的是(b)这似乎没有效果,即调试器仍然只是在 main 上退出。

有没有恢复旧的、特定的调试行为的好方法?

我目前正在运行 Xcode 7.0,但这种行为发生在 7-GM Seed 上,即使现在我回去尝试曾经可以工作的 7 beta 5 和 beta 6。

【问题讨论】:

【参考方案1】:

转到调试导航器 (cmd-7),单击底部的加号按钮并选择添加异常断点。这将在问题发生的实际行中断。

在异常断点详细信息编辑器中创建调试器命令操作并在文本框中输入po $arg1。这将在调试控制台中显示错误消息。

【讨论】:

好的,谢谢,实际上我已经尝试将“所有异常”设置为断点——使用断点导航器(cmd-7),顺便说一句——这并没有改变任何东西,除了来自同一行代码(“UIApplicationMain”定义)的绿色“Breakpoint 1.2”栏,否则它将以红色显示“EXC_BAD_ACCESS”。添加“po $arg1”会在控制台中生成以下数字作为输出:“140614316631224”。用这个号码做什么? 在我使用 Xcode 7.1 b2 的环境中(过去使用旧版本),它给出了我在回答中描述的结果。如果它仍然在 AppDelegate 中给你一个断点和一个神秘的错误消息“140614316631224”,那么你现在正在处理的特定错误很可能不在你的代码中。 感谢 cmd-7 提示,已修复。 我遇到的崩溃问题似乎与在 ios 9 中尝试从 NSUserDefaults 恢复用户数据有关。如果我将 iOS 9 换成 iOS 8.4,问题就会消失。但由于我希望该应用程序也可以在 iOS 9 中运行,因此我想知道具体问题是什么,因此我希望调试器可以提供更多信息。【参考方案2】:

之前的答案在正确的轨道上,但这个答案在今天更相关:

在带有 Swift 4 的 Xcode 9.2 上,执行以下操作:

    使用 Command-8 调出调试导航器。 点击左下角的+ 选择 Swift 错误断点

就是这样! :)

【讨论】:

以上是关于Xcode 调试器不再显示违规行,而是始终显示 UIApplicationMain的主要内容,如果未能解决你的问题,请参考以下文章

控制台未在 Apple 的快速启动中显示 Mac OS 应用沙箱违规

Xcode 代码链接错误始终显示“对象:退出”并且无法更改连接类型

Xcode 不再显示@available 警告

无需付费证书通过Xcode进行安装调试

Xcode 9,watchOS4,不再显示 15% 的后台 CPU 限制?

Xcode 调试器显示不正确的变量值