debugging MetricKit MX诊断符号

nxagd54h  于 2023-02-16  发布在  其他
关注(0)|答案(3)|浏览(168)

我正在尝试实现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中找到任何参数。我试图按照thisthis指南进行符号化过程,this question也提供了一些答案,但看起来我没有正确的符号化数据,即使我正确地设置了报告。
如果有人能让我知道我错过了什么,以及如何正确地象征这些报告,我将不胜感激。

xxls0lw8

xxls0lw81#

调试-〉模拟MetricKit有效负载这只是一个示例。它不能用atos符号化。

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

fdbelqdn

fdbelqdn2#

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

disbfnqx

disbfnqx3#

这里有一个关于在苹果开发者论坛上符号化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>

相关问题