符号化iOS崩溃地址返回不适当的结果
我最近花了几天时间来学习如何用自定义解决方案来象征我收到的崩溃行号 我发现我需要.app和.dSYM文件,我检查了UUID,它与我得到的崩溃相同,我也得到了UUID来验证 三个相同的UUID,体系结构是arm64,我从我的iPhone5S上得到了崩溃测试 好吧,假设我的stacktrace中有两个与我的申请行相关的。这是我从JSON中得到的完整stacktrace符号化iOS崩溃地址返回不适当的结果,ios,objective-c,symbolicatecrash,symbolicate,Ios,Objective C,Symbolicatecrash,Symbolicate,我最近花了几天时间来学习如何用自定义解决方案来象征我收到的崩溃行号 我发现我需要.app和.dSYM文件,我检查了UUID,它与我得到的崩溃相同,我也得到了UUID来验证 三个相同的UUID,体系结构是arm64,我从我的iPhone5S上得到了崩溃测试 好吧,假设我的stacktrace中有两个与我的申请行相关的。这是我从JSON中得到的完整stacktrace "0 MyTestApp 0x10000efe8 0x100008000 + 28648", "1
"0 MyTestApp 0x10000efe8 0x100008000 + 28648",
"1 UIKit 0x1863d90c8 0x186390000 + 299208",
"2 UIKit 0x1863d905c 0x186390000 + 299100",
"3 UIKit 0x1863c2538 0x186390000 + 206136",
"4 UIKit 0x1863d8a5c 0x186390000 + 297564",
"5 UIKit 0x1863d86f0 0x186390000 + 296688",
"6 UIKit 0x1863d3388 0x186390000 + 275336",
"7 UIKit 0x1863a4b68 0x186390000 + 84840",
"8 UIKit 0x1863a2c58 0x186390000 + 76888",
"9 CoreFoundation 0x18339b044 0x1832d0000 + 831556",
"10 CoreFoundation 0x18339a3a0 0x1832d0000 + 828320",
"11 CoreFoundation 0x183398638 0x1832d0000 + 820792",
"12 CoreFoundation 0x1832d96d0 0x1832d0000 + 38608",
"13 GraphicsServices 0x188fbdc0c 0x188fb0000 + 56332",
"14 UIKit 0x18640afdc 0x186390000 + 503772",
"15 MyTestApp 0x10000e4f0 0x100008000 + 25840",
"16 libdyld.dylib 0x18fed3aa0 0x18fed0000 + 15008"
好的,现在我在一个包含.app和.dSYM文件的文件夹中运行atos命令,尝试查找并符号化内存地址
xcrun atos -arch arm64 -o 'MyTestApp.app'/'MyTestApp' 0x10000efe8
但这行并没有返回我可以使用的东西
-[AFHTTPRequestSerializer multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:] (in MyTestApp) (AFURLRequestSerialization.m:317)
我仍然在学习这个过程,但我相信(在MyTestApp中)
应该是我的测试应用程序中可读的东西
下面是我用来使应用程序崩溃并测试如何对stacktrace进行符号化的代码
113 - (IBAction)logUnhandledException:(UIButton *)sender
114 {
115 void (*nullFunction)() = NULL;
116 nullFunction();
117 }
编辑:
我有“图像大小”:“0xa8000”
和“图像基本地址”:“0x100008000”
我是否应该获得一些关于这种方法和行号的信息(如果可行)
感谢您的帮助和评论
谢谢。当您想在-l标志后使用加载地址(第二个地址,最好始终使用框架/库的映像基址,但我的经验是迄今为止从未更改过),然后使用此框架的所有符号地址,您想要符号化的框架架构和相应的iOS版本,或者如果它是您的应用程序行,则使用dSYM文件,例如iOS 8.1.1的UIKit符号
xcrunatos-arch arm64-o~/Library/Developer/Xcode/iOS DeviceSupport/8.1.1(12B436)/Symbols/System/Library/Frameworks/UIKit.framework/UIKit-l。。。
用于您自己的应用程序行
xcrunatos-arch arm64-o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp-l。。。
当你想使用加载地址(第二个地址,最好总是使用框架/库的映像基址,但在我的经验中,这个基址到目前为止从未改变过),然后使用-l标志,然后使用这个框架的所有符号地址,您想要符号化的框架架构和相应的iOS版本,或者如果它是您的应用程序行,则使用dSYM文件,例如iOS 8.1.1的UIKit符号
xcrunatos-arch arm64-o~/Library/Developer/Xcode/iOS DeviceSupport/8.1.1(12B436)/Symbols/System/Library/Frameworks/UIKit.framework/UIKit-l。。。
用于您自己的应用程序行
xcrunatos-arch arm64-o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp-l。。。
您将获得所有适当的结果。您需要应用程序二进制文件的加载地址。为什么不使用现有的崩溃报告库来解决所有这些问题呢?基于感谢你的评论的东西。事实上,我使用的是PLCrashReporter,它很棒,这就是我获取stacktrace的方式。它是如何解决这个问题的?说实话,我正在努力学习更多关于象征的知识,更多的方法等等。还有什么帮助吗?如何获取加载地址?或者PLCrashReporter是如何解决这个问题的,这样我才能得到最好的结果。加载地址是崩溃报告中
二进制图像
部分的一部分。关于如何用数据进行符号化,有很多问题和答案。搜索或检查我多次给出的此类问题的答案。PLCrashReporter有一个在运行时生成完整报告的功能:好的,我已经用图像大小和图像基址更新了这个问题。这些有帮助吗?我将做一项研究,但我想在这篇文章中为我的问题添加一个答案。好的,我将尝试GenerateLifeReportWithThread方法来检查结果并检查崩溃报告的图像地址。Base address=Load address您需要应用程序二进制文件的加载地址。为什么不使用现有的崩溃报告库来解决所有这些问题呢?基于感谢你的评论的东西。事实上,我使用的是PLCrashReporter,它很棒,这就是我获取stacktrace的方式。它是如何解决这个问题的?说实话,我正在努力学习更多关于象征的知识,更多的方法等等。还有什么帮助吗?如何获取加载地址?或者PLCrashReporter是如何解决这个问题的,这样我才能得到最好的结果。加载地址是崩溃报告中二进制图像
部分的一部分。关于如何用数据进行符号化,有很多问题和答案。搜索或检查我多次给出的此类问题的答案。PLCrashReporter有一个在运行时生成完整报告的功能:好的,我已经用图像大小和图像基址更新了这个问题。这些有帮助吗?我将做一项研究,但我想在这篇文章中为我的问题添加一个答案。好的,我将尝试GenerateLifeReportWithThread方法来检查结果并检查崩溃报告的映像地址。基址=加载地址