我正在尝试实现MetricKit,以便以后可以分析MXCrashDiagnostic
和MXHangDiagnostic
报告。但是,当我触发测试崩溃,然后执行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]]
对于cpuExceptionDiagnostics
和hangDiagnostics
,callStackTree
的值始终相同。
我试着通过执行命令来符号化数据:
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中找到任何参数。我试图按照this和this指南进行符号化过程,this question也提供了一些答案,但看起来我没有正确的符号化数据,即使我正确地设置了报告。
如果有人能让我知道我错过了什么,以及如何正确地象征这些报告,我将不胜感激。
3条答案
按热度按时间xxls0lw81#
调试-〉模拟MetricKit有效负载这只是一个示例。它不能用atos符号化。
唯一的问题是从用户那里收集有效载荷。
fdbelqdn2#
我猜当您在XCODE中触发模拟metricKit有效载荷时,它将始终提供包含MXDiagnosticPayload的相同数组。
disbfnqx3#
这里有一个关于在苹果开发者论坛上符号化MetricKit崩溃报告的有用线程:https://developer.apple.com/forums/thread/681967
简而言之,对于您拥有dSYM的每个调用堆栈帧(可能只是您的应用),获取
offsetIntoBinaryTextSegment
并将其从十进制转换为十六进制,然后如下所示调用atos
:其中
<offset in hex>
是从offsetIntoBinaryTextSegment
转换为十六进制的值。我在示例中使用arm64
是假设这是一个iOS应用程序。你还应该验证每一帧中的
binaryUUID
值是否与你给atos
的dSYM文件的UUID相匹配。你可以用dwarfdump
得到dSYM文件的UUID,如下所示: