2

我最近花了几天时间来学习如何用自定义解决方案来表示我收到的崩溃的行号。

我已经确定我需要 .app 和 .dSYM 文件,我检查了 UUID,它与我遇到的崩溃相同,我还需要验证 UUID。

三个相同的 UUID 和架构是 arm64,我从我的 iPhone5S 上测试它的崩溃。

好的,假设我的堆栈跟踪中有两个与我的应用程序行相关。这是我得到的 JSON 的完整堆栈跟踪。

      "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)

我仍在学习这个过程,但我相信(in MyTestApp)应该从我的测试应用程序中读取一些东西。

我用来使应用程序崩溃并测试如何符号化堆栈跟踪的代码如下。

113 - (IBAction)logUnhandledException:(UIButton *)sender
114    {
115    void (*nullFunction)() = NULL;
116    nullFunction();
117    }

编辑: 我有"image_size": "0xa8000""image_base_address": "0x100008000"

我不应该得到一些关于这个方法和行号的信息(如果可行的话)吗?

任何帮助和评论表示赞赏。

谢谢你。

4

1 回答 1

4

当您想符号化使用 -l 标志之后的加载地址(第二个地址,最好始终使用框架/库的图像基地址,但到目前为止,这在我的经验中从未改变过),然后是所有符号此框架的地址、架构和您要符号化的框架的相应 iOS 版本,或者如果它是您的应用程序的行,则使用 dSYM 文件,例如 iOS 8.1.1 的 UIKit 符号

xcrun atos -arch arm64 -o ~/Library/Developer/Xcode/iOS DeviceSupport/8.1.1 (12B436)/Symbols/System/Library/Frameworks/UIKit.framework/UIKit -l <load_address> <symbols_addressess> ...

对于您自己的应用线

xcrun atos -arch arm64 -o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp -l <load_address> <symbols_addressess> ...

你会得到所有适当的结果。

于 2014-12-05T19:52:02.550 回答