我正在尝试实现MetricKit,这样以后我就可以分析MXCrashDiagnostic和MXHangDiagnostic报告。但是,当我触发测试崩溃时,下面是我从MXCrashDiagnostic获得的一个示例:
ente "timeStampEnd": "2021-06-07 15:59:00 +0000",
"crashDiagnostics": [
{
"version": "1.0.0",
"callStackTree": {
"callStacks": [
{
"threadAttributed": true,
"callStackRootFrames": [
{
"binaryUUID": "DC2EACEA-3D9C-3409-96C2-2DF9C89AD19D",
"offsetIntoBinaryTextSegment": 6917586944,
"sampleCount": 1,
"subFrames": [
{
"binaryUUID": "DC2EACEA-3D9C-3409-96C2-2DF9C89AD19D",
"offsetIntoBinaryTextSegment": 6917586944,
"sampleCount": 1,
"subFrames": [
{
"binaryUUID": "DC2EACEA-3D9C-3409-96C2-2DF9C89AD19D",
"offsetIntoBinaryTextSegment": 6917586944,
"sampleCount": 1,
"subFrames": [
{
"binaryUUID": "35463E49-9534-3644-B993-2A73C287A143",
"offsetIntoBinaryTextSegment": 4329963520,
"sampleCount": 1,
"binaryName": "demo",
"address": 4333717704
}]我试图通过执行命令来符号化数据:
/Users/xxx/Downloads/!dsym-4/demo.app.dSYM/Contents/Resources/DWARF/demo -arch arm64e -o atos 4333717704
但是我找不到崩溃堆栈,返回的结果是4333717704
DSYM文件uuid为UUID: 35463E49-9534-3644-B993-2A73C287A143 (arm64) /Users/xxx/Downloads/!dsym-3/demo.app.dSYM/Contents/Resources/DWARF/demo
MetrickIt返回的堆栈应该如何符号化?谁能告诉我非常感谢
发布于 2021-08-30 09:28:51
offsetIntoBinaryTextSegment字段而不是address。MXCallStackTree解释每个字段的含义。它告诉我们offsetIntoBinaryTextSegment是symbol的地址。address是memory.atos只接受十六进制,address.atos --help会告诉你需要两个地址参数。-l之后的loadAddress是您的二进制映像加载地址。address是符号偏移量(offsetIntoBinaryTextSegment)+ loadAddress。参见crash report symbolication。在MXCallStackTree中,我们不知道像崩溃报告这样的二进制镜像加载地址。但这并不是必须的。atos只关心address - loadAddress == offsetIntoBinaryTextSegment。在您的情况下,一个诀窍是loadAddress=0x1和address=hex(offsetIntoBinaryTextSegment + 1)。因此,命令行应该是0x102160000 = hex(4329963520)atos -arch arm64e -o /Users/xxx/Downloads/!dsym-4/demo.app.dSYM/Contents/Resources/DWARF/demo 0x1 0x102160001下面的讨论可能也会对您有所帮助:https://developer.apple.com/forums/thread/681967
发布于 2021-12-06 11:00:02
好的,所以我一点也不惊讶你会有问题。我认为每个试图符号化MetricKit数据的人都会遇到问题。
原因是offsetIntoBinaryTextSegment字段的名称不正确。它实际上是二进制加载地址!我花了很长时间才弄明白这个问题。我已经向苹果提交了一个bug,我建议你也这样做。(尽管我对此不抱太大希望,因为这个JSON结构实际上是一个API)
您想要做的是:
atos -arch ARCH -i -l <offsetIntoBinaryTextSegment> /path/to/dsym <address>https://stackoverflow.com/questions/67886881
复制相似问题