2

最近、カスタム ソリューションで受信したクラッシュの行番号を記号化する方法を学ぶために数日を費やしました。

.app ファイルと .dSYM ファイルが必要であることがわかりました。UUID を確認しました。これは、UUID を検証するために取得したクラッシュと同じです。

3 つの同一の UUID とアーキテクチャは arm64 です。iPhone5S からテストするとクラッシュします。

OK、スタックトレースにアプリケーション行に関連する 2 つがあるとしましょう。これは、取得した 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"

OK、今度は .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 フラグの後にロード アドレス (2 番目のアドレス、常にフレームワーク/ライブラリのイメージ ベース アドレスを使用する方が良いですが、これまでの経験では変更されていません) を使用し、次にすべてのシンボルを使用します。このフレームワークのアドレス、シンボル化するフレームワークのアーキテクチャと対応する iOS バージョン、またはそれがアプリケーションの行である場合は、iOS 8.1.1 の UIKit シンボルなどに dSYM ファイルを使用します。

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 に答える