如何阅读/翻译 macOS 12(Monterey).ips 崩溃文件?

6

从macOS 12(Monterey)开始,系统显然将崩溃文件编写为.ips文件,而不是传统的.crash文件格式。

该文件似乎包含JSON数据:

{"app_name":"Helper","timestamp":"2021-10-30 18:49:32.00 +0100","app_version":"3.0.0(66) beta","slice_uuid":"673198dd-94ac-31a7-9e81-09fe6c781255","build_version":"3.0.0.66","platform":1,"bundleID":"com.dislt.helper","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.0.1 (21A559)","incident_id":"CC03C2EC-C1D4-4F6E-AA1F-6C4EC555D6B8","name":"Helper"}
{
  "uptime" : 91000,
  "procLaunch" : "2021-10-30 18:49:29.7791 +0100",
  "procRole" : "Unspecified",
  "version" : 2,
  "userID" : 501,
  "deployVersion" : 210,
  "modelCode" : "MacBookPro14,3",
  "procStartAbsTime" : 91844701503187,
  "coalitionID" : 1244,
  "osVersion" : {
    "train" : "macOS 12.0.1",
    "build" : "21A559",
    "releaseType" : "User"
  },
  "captureTime" : "2021-10-30 18:49:32.4572 +0100",
  "incident" : "92A89610-D70A-4D93-A974-A9018BB5C72A",
  "bug_type" : "309",
  "pid" : 77765,
  "procExitAbsTime" : 91847378271126,
  "cpuType" : "X86-64",
  "procName" : "Helper",
  ...

当我预览文件或在Console应用程序中打开它时,会自动生成传统的崩溃报告:
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               Helper [77765]
Path:                  /Users/USER/Library/Application Support/Helper.app/Contents/MacOS/Helper
Identifier:            com.distl.helper
Version:               3.0.0(66) beta (3.0.0.66)
Code Type:             X86-64 (Native)
Parent Process:        TestBead [77726]
Responsible:           TestBead [77726]
User ID:               501

Date/Time:             2021-10-30 18:49:32.4572 +0100
OS Version:            macOS 12.0.1 (21A559)
Report Version:        12
Bridge OS Version:     3.0 (14Y908)
Anonymous UUID:        CC03C2EC-C1D4-4F6E-AA1F-6C4EC555D6B8


Time Awake Since Boot: 91000 seconds

System Integrity Protection: enabled

Crashed Thread:        1  Dispatch queue: com.apple.NSXPCConnection.user.anonymous.77726

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x00007f780071a000
Exception Codes:       0x0000000000000001, 0x00007f780071a000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process:   exc handler [77765]
...

我有客户支持和开发工具,可以自动扫描这些崩溃报告文件。我想知道是否有一种方法将JSON数据自动转换回传统的崩溃报告格式?我希望通过这样做来 (a) 避免重新编写我的崩溃报告扫描工具(虽然这不是不可能的),以及 (b) 自动将这些文件转换为易于阅读的人类可读格式,而不必使用 Console 应用打开文件。

你是否遇到版本号为空的报告?请参考 https://dev59.com/yW4NtIcB2Jgan1znVEx1 - Thomas Tempelmann
1个回答

5

我也遇到了同样的问题。虽然我还没有尝试过,但是有人已经在GitHub创建了一个名为ips2crash的命令。正如名称所示,它应该将.ips文件转换为(现在)旧的崩溃报告格式。


2
谢谢!我在最初的搜索中没有找到这个。我下载了这个项目,发现它最初无法解析我的崩溃报告。但是我找到了问题,修复了它,并向原作者发送了一个拉取请求。 - James Bucanek
你是否遇到了版本号为空的报告?请参考https://dev59.com/yW4NtIcB2Jgan1znVEx1 - Thomas Tempelmann
我没有。虽然我会注意到应用程序版本是从应用程序包信息中获取的,因此裸露的可执行文件不会得到一个版本号。此外,在任何无法识别、定位、读取、解析包的情况下,... 我有一个问题,那就是ips2crash的当前版本不能解析应用程序特定的回溯,如果您使用了很多延迟块(如我的应用程序),那么这几乎是唯一可以找到崩溃代码的地方。我需要抽出一些时间在这个周末来研究一下。 - James Bucanek
1
我发现自己需要这个工具,但是没有Makefile或文档来编译它。非常不幸。 - Jim
1
@Jim,在tool_ips2crash文件夹中有一个Xcode项目,你可以通过Xcode进行构建。不幸的是,这个工具对我来说不起作用——当我传入ips文件时,它会显示“读取文件时发生错误”。 - JasonZ
很不幸。我从来不使用Xcode,所以我不熟悉如何使用。我会去谷歌一下。 - Jim

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