如何通过编程获取应用程序、守护进程和OSX程序的崩溃/挂起报告?

5
我知道有一种方法可以获取所有应用程序的崩溃和挂起。这些文件位于“/Users/user/Library/Logs/DiagnosticReports”中。因此,我可以获取应用程序的版本、时间和名称。
但是如何获取守护进程/进程崩溃和挂起?我需要知道确切的守护进程崩溃/挂起的时间和名称。
此外,是否有一种方法可以获取一些系统(OSX)崩溃的相同信息?
还可以获取一些资源故障/警告:内存不足或磁盘空间不足。
我需要以编程方式获取它。
在Windows上,我们可以使用NotifyChangeEventLog() API来实现此目的。我们可以使用这种方法收集所有这些信息。它还会通知是否发生了任何事情。
2个回答

3
要查看守护程序崩溃/挂起报告,请参阅“/Library/Logs/DiagnosticReports”目录。根据此文档,您还可以在那里找到内核恐慌报告(即系统崩溃)。
不知道NotifyChangeEventLog类似的API,但在“内存不足”等情况下会有异常,因此您只需要捕获它。有关详细信息,请参见错误处理编程指南。还要查看异常编程主题 编辑:有关Crash Reporter的信息,请查看Levin的书“Mac OS X和iOS Internals: To the Apple's Core”的第5章。

我通过命令“sudo kill 1”使OSX崩溃,但在系统重新启动后,在“/Library/Logs/DiagnosticReports”目录中没有找到任何崩溃报告。 - Serge
@Sergio,你没有让OSX崩溃,你只是通过发送SIGTERM终止了lauchd进程。这只是关机。 - cody
即使不是OSX崩溃,操作系统也应该生成崩溃报告。因为它是一个进程。我还尝试杀死其他守护程序/进程,但没有生成报告。请问您能否提供一些示例,如何接收要终止的进程以接收报告。 - Serge
不应该生成崩溃报告,因为没有崩溃。如果你想要一个崩溃,可以在你的应用程序中添加一些错误代码,编译并运行。比如除以零或者解引用空指针之类的。 - cody
@Sergio。你只需解析报告名称,就可以获取所有这些信息。它有特殊的格式<process_name><date>-<time><host_name>.<event>。简单的正则表达式就能帮到你。 - cody

3

在10.9版本中,当你的应用程序出现卡顿但没有崩溃,因此也没有崩溃报告时,活动监视器会提供两个工具:

spindump - 类似崩溃报告的内存转储文件和 sys digs - 生成一堆文件的工具


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