MetricKit MXDiagnostic symbolication



我正在尝试实现MetricKit,以便稍后可以分析MXCrashDiagnosticMXHangDiagnostic报告。然而,当我触发测试崩溃,然后执行Debug->Simulate MetricKit Payloads时,我总是在dictionaryRepresentation()中收到完全相同的结果。以下是MXCrashDiagnostic的示例:

[[AnyHashable("diagnosticMetaData"): {
appBuildVersion = 2;
appVersion = "1.0";
deviceType = "iPhone10,6";
exceptionCode = 0;
exceptionType = 1;
osVersion = "iPhone OS 14.0.1 (18A393)";
platformArchitecture = arm64;
regionFormat = CA;
signal = 11;
terminationReason = "Namespace SIGNAL, Code 0xb";
virtualMemoryRegionInfo = "0 is not in any region.  Bytes before following region: 4000000000 REGION TYPE                      START - END             [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL UNUSED SPACE AT START ---> __TEXT                 0000000000000000-0000000000000000 [   32K] r-x/r-x SM=COW  ...pp/Test";
}, AnyHashable("callStackTree"): {
callStackPerThread = 1;
callStacks =     (
{
callStackRootFrames =             (
{
address = 74565;
binaryName = testBinaryName;
binaryUUID = "A36D6CF4-CBE8-4FB9-9DC4-C7EE8C6431CC";
offsetIntoBinaryTextSegment = 123;
sampleCount = 20;
}
);
threadAttributed = 1;
}
);
}, AnyHashable("version"): 1.0.0]]

对于cpuExceptionDiagnosticshangDiagnosticscallStackTree的值总是相同的。

我试图通过执行命令来象征数据:

1. cd /Path/To/Archive/myApp.xcarchive/dSYMs/myApp.app.dSYM/Contents/Resources/DWARF/
2. atos -arch arm64 -o myApp 0x00074565

但总是得到相同的结果:

atos[79918]: respawning is disabled (because DYLD_ROOT_PATH or DT_NO_RESPAWN is set), but the analysis process does not match the SDK variant of the target process 0.
Analysis of malloc zones may fail.
0x00074565 (in myApp)

我在网上没有发现任何关于警告的信息,也没有发现xcode中的任何参数我试着遵循这个和这个关于符号化过程的指南,也为这个问题提供了一些答案,但看起来我没有正确的符号化数据,尽管我确实正确地设置了报告。

如果有人能让我知道我遗漏了什么,以及如何正确地象征这些报告,我将不胜感激。

调试->模拟MetricKit有效负载这只是一个例子。这是atos无法象征的。

唯一的麻烦是从用户那里收集有效载荷。

我猜当您在XCODE中触发模拟metricKit有效载荷时,它将始终提供包含MXDiagnosticsPayload的相同阵列。

这里有一个关于在Apple开发者论坛上象征MetricKit崩溃报告的有用线索:https://developer.apple.com/forums/thread/681967

简而言之,对于您有dSYM的每个调用堆栈帧(可能只是您的应用程序(,获取offsetIntoBinaryTextSegment并将其从十进制转换为十六进制。然后调用atos,如下所示:

atos -arch arm64 -o <path to dSYM> 0x1 <offset in hex>

其中<offset in hex>是从offsetIntoBinaryTextSegment转换为十六进制的值。我在示例中使用了arm64,假设这是一个iOS应用程序。

您还应该验证每帧中的binaryUUID值是否与您提供给atos的dSYM文件的UUID匹配。您可以使用dwarfdump:获得这样的dSYM文件的UUID

dwarfdump --uuid <path to dSYM>

相关内容

  • 没有找到相关文章

最新更新