如何使用Mac 控制台来分析Crash

Posted by CoderLeonidas on March 23, 2020

如何使用Mac 控制台来分析Crash

你的Mac电脑可能基本上没有什么问题,至少大多数时候是这样。但偶尔你可能会遇到系统、进程或应用程序崩溃,使你无法继续工作。这些崩溃通常是短暂的,只需重新启动应用程序或重启Mac就可以解决。

虽然偶尔的崩溃会让人沮丧,但通常不需要太担心。事情发生了,你可以把它看作是你有一个好的备份系统的众多原因之一。(你知道,不是吗?)

现在,当一个崩溃开始在更有规律的基础上发生,或者你注意到它总是在x事件发生时发生,可能是时候开始深入研究崩溃并发现可能导致问题的原因了。

在这篇火箭发射场指南中,我们将看看如何使用控制台应用程序来跟踪系统或应用程序崩溃的原因。如果幸运的话,控制台应用程序将能够帮助你解决导致崩溃的问题,或者至少让你对正在发生的事情有一个很好的了解。

什么是控制台App

在早期的计算中,控制台是一个连接到计算机上的终端,用来监视系统的状态。如果你再往前看,控制台可能是一排仪表、灯和开关,它们指示着计算机的运行情况。

(来自macOS High Sierra的控制台应用。侧栏显示了向控制台报告的设备,以及按类别组织的报告)

Mac电脑上的控制台应用程序是旧电脑控制台的现代版;它的主要工作是帮助你监控Mac的运行情况。它之所以能做到这一点,是因为它能够显示Mac操作系统和各个应用程序运行时生成的日志、状态和错误文件。

日志文件

应用程序、进程和系统在工作时生成许多不同类型的文件;你可以把它们看作是记录任何时间点上正在发生的事情的日记或日记。虽然有诊断文件、崩溃文件、日志文件和其他一些类型,但我们将把它们统称为日志文件。大多数情况下,它们都可以被控制台应用程序读取。

(OS X Yosemite控制台应用程序展示的当系统首选项意外终止时的崩溃日志。结果显示,首选项窗格来自应用程序的旧版本,不再受支持)

控制台应用程序还可以查看进程消息和其他一些实时事件,但是我们将主要关注日志文件,以了解过去发生的事情,比如系统或应用程序何时崩溃。

控制台的介绍

即使你没有经历过最近的系统或应用程序崩溃,也没有意外重启,请继续并启动控制台应用程序,以便你熟悉界面。

启动控制台,位于/Applications/Utilities

控制台可能看起来有点不同,这取决于你正在使用的Mac操作系统的版本。从一个系统到另一个系统的大多数更改都是修饰性的,例如这里和那里的一些名称更改,尽管从OS X El Capitan到macOS Sierra有一个重要的更改。主要的变化是删除或重新定位了一些用于查看实时事件的故障诊断工具。由于我们不是试图跟踪bug的开发人员,所以这对我们使用控制台查看日志文件不会有太大影响。

打开控制台应用程序后,你将看到一个多窗格界面,其中有一个侧边栏用于选择要显示的实时消息或日志文件,顶部有一个工具栏,而在控制台的新版本中,工具栏下方有一个搜索栏和选项卡栏。

访问日志文件

你可能有兴趣查看日志文件,以了解有关崩溃原因的信息,可以在控制台侧边栏的标题下找到这些日志文件:

  • User Reports (控制台早期版本中的用户诊断报告): 用户进程和应用程序的崩溃报告
  • System Reports (控制台早期版本中的系统诊断报告): 系统进程的分析、诊断和崩溃报告。
  • System log: 当前系统事件和消息的日志。
  • ~/Library/Logs: 当前登录用户的应用程序日志。
  • /Library/Logs: 所有用户的应用程序和流程事件日志。
  • /var/logs: 系统使用的维护脚本的日志文件。

要访问日志文件,请在侧栏中选择感兴趣的类别。如果该类别的名称旁边有一个三角折叠按钮,通过单击按钮展开该目录。

日志文件列表将显示在侧栏或主查看窗格中,具体取决于你正在使用的控制台版本。

(/var/log类别包含一些有趣的日志,包括Mac在后台运行的所有自动维护脚本的结果)

选择一个列出的文件来查看它的内容。

日志文件名通常包含生成文件的进程名或应用程序名、日期、Mac电脑的名称,最后是文件类型,如crashdiaganalytics

在大多数情况下,崩溃日志将是你感兴趣的用于系统或应用程序崩溃故障排除的日志,但是diag日志也很值得查看,因为它们可能包含关于异常内存使用或高水平CPU使用的信息。

理解报告文件

crash报告分为多个部分:

第一部分,包含关于进程崩溃的所有信息:

  • Process: 列出进程的名称,如TextEdit。
  • Path: 进程所处位置
  • Identifier: 唯一的进程名, 如 com.apple.textedit.
  • Version: 进程或app的版本
  • Code Type: 运行代码的处理器类型
  • Parent Process: 如果崩溃的进程是由另一个进程引发的,它将在这里列出
  • Responsible: 通常是应用程序或进程名或开发人员。
  • User ID: 应用程序或进程使用的用户ID。

第二部分,告诉你应用程序或进程何时崩溃:

  • Date/Time: 进程或应用程序终止的日期和时间。
  • OS Version: 崩溃时正在运行的Mac OS版本。一个有趣的提示:Console仍然使用OS X作为操作系统名,尽管版本号是正确的。
  • Report Version: 正在使用的崩溃报告样式的版本号。
  • Anonymous UUID: 这是一长串数字和字母,它们是进程的唯一标识符。
  • Time Awake Since Boot: 系统运行了多长时间,显示为秒数。
  • System Integrity Protection: 显示SIP的状态。

第三部分,揭示了问题的实质:是什么导致了崩溃:

  • Crashed Thread: 崩溃发生时正在运行哪个进程线程。
  • Exception Type: 这是导致崩溃的实际事件
  • Exception Codes: 有关导致异常类型的其他详细信息。
  • Exception Note: 由崩溃生成的消息(如果有的话)。
  • Termination Signal: 用于通知进程退出的信号类型的名称。
  • Termination Reason: 启动的终止信号的类别。
  • Termination Process: 哪个进程启动的终止。

报告的下一长段按时间倒序列出了导致崩溃的原因,从列出原因的线程开始。这可能看起来像一个金矿,发现什么导致了你的崩溃,它是。本节和下一节称为回溯,对于开发人员解决系统或应用程序崩溃的故障非常有帮助。然而,它通常对大多数用户没有太大帮助。

(控制台应用程序中显示的崩溃报告的剖析。)

这些信息可以做什么?

你可以做的最好的事情之一是联系开发人员,打开一个support ticket,并发送这个崩溃报告。开发人员需要此类信息来排除故障并改进他们的应用程序或代码。

根据你正在使用的控制台版本,你可以选择其中之一:

  • 使用“文件”菜单下的“另存为”命令保存崩溃报告的副本,然后可以将该副本发送给开发人员。或者,如果你正在使用较新版本的控制台,你可以使用工具栏中的共享按钮将崩溃报告附加到电子邮件中。

  • 你还可以右键单击崩溃报告名称,并从弹出菜单中选择Reveal in Finder。然后,你可以使用Finder创建副本并将其发送给开发人员。

(应用程序崩溃将显示一条提示崩溃发生的消息。你可以选择报告按钮来显示崩溃报告,而不必费力地通过控制台应用程序来找到它。)

如果你试图自己解决崩溃,请注意崩溃发生的确切时间,然后检查诊断日志和分析日志,查看可能在同一时间或接近同一时间发生的异常事件。例如,你正在查找内存或CPU使用率过高的情况。例如,你可能会发现,Safari的核心组件WebKit在崩溃发生时使用了大量的RAM,你可以通过添加更多的RAM来纠正这一点。或者,可能CPU使用率太高,以至于在炎热的夏天,你的Mac无法应付高温。

另一件需要注意的事情是正在崩溃的应用程序版本。很多时候,一个过时的版本可能会导致应用程序崩溃。请与应用程序开发人员联系,了解当前版本是什么,如果有的话,建议在你的Mac OS版本上运行哪个版本。

有关使用控制台应用程序的更多信息,你可以参考控制台使用手册

参考文章

how to use the mac console app to diagnose a crash