2016-04-13 7 views
0

iOSでは、セキュリティ上の理由からデバッグシンボルがリリースバイナリから削除されます。それでは、ファブリック、ホッケーなどのクラッシュレポートツールはどのように「デリボリケート」し、リリースビルドからのクラッシュポイントの素敵なスタックトレースを表示しますか?iOSのクラッシュレポートツールは、リリースビルドのクラッシュレポートの相違をどのように排除しますか?

OSで生成されたトレースに頼るのではなく、自分でクラッシュをキャプチャ/トレースしますか?

+0

ファブリックでは、dsymファイルをアップロードする必要があります。アップロードすると、クラッシュログを表すことができます。 – rckoenes

+0

しかし、ビルドリリースビルドは決してdsymファイルを持っていないので、それではどのように動作しますか? Hockeyのようなツールのほかに、フィールドで発生したクラッシュのシンボル化されたクラッシュログ、つまりベータテスト中に発生したクラッシュログが表示されます。私は個人的にベータテスターとしてクラッシュを経験しました。それはdSymをアップロードしていない限り素敵で上品なものでした。 – 0x6d6e

+0

リリースビルドにはdsymがあります。私はホッケーでは一度も働いていませんでしたが、そこにシステム。 – rckoenes

答えて

2

以下は、OS X、iOSの、tvOSともwatchOSに適用されます。

  1. バイナリ自体がシンボルを含むされている場合、それらは唯一のクラス名やメソッド名を提供することができます。しかし、決してファイル名や行番号。したがって、利点は限られていますが、バイナリサイズの増加は30〜50%も大きくなります(見積もりはアプリケーションによって大きくまたは小さくなることがあります)。
  2. ビルド設定が適切に設定されていればデフォルト設定= DEBUG_INFORMATION_FORMATDWARF with dSYM File)、一度だけビルドすると、象徴的に必要なすべての要素を含むdwarfファイルと、ファイル名と行番号を取得するdSYMパッケージも得られます。

iTunes Connect、Xcode、Fabric、HockeyAppなどは実際にどのように記号化しますか?

これらはすべてdSYMパッケージのdwarfファイルを使用しています。彼らは、スタックフレームからメモリアドレスを取得し、アドレス範囲を照合してバイナリイメージのバイナリイメージセクションでバイナリイメージを検索し、バイナリイメージのUUIDを取得し、一致するUUIDを含むdSYMパッケージを検索しますCPUアーキテクチャーを実行してから、atosのようなツールを実行して(デマングル)シンボルを取得します。

スタックトレースはどのように取得されますか?

  1. OSは、iTunes ConnectとXcodeで使用されるプロセス外のクラッシュレポートを生成します。
  2. すべてのサードパーティ製システムには、信号ベースのクラッシュと未処理の例外のクラッシュハンドラを設定するアプリケーションにコードが追加されている必要があります。クラッシュ時にクラッシュレポートに必要なすべての情報を安全に取得しようとします。このコードはアプリプロセスで実行されるため、安全にそのデータを収集し、ユーザーのデータを破棄したり、デッドロックを発生させたりすることはありません(クラッシュ時にメモリを割り当てられないなど)。サードパーティのシステムでは、アプリケーションサンドボックスの外にあるため、システムによって生成されたクラッシュレポートを取得することはできません。
+0

ありがとうございます。非常に詳細。私はリリースビルドがdsymファイルを生成しないという前提の下にいました。しかし、** DEBUG_INFORMATION_FORMAT **を** DWARFにdSYMファイル**で設定すると、dSymファイルが生成されます。しかし、.ipaバンドルにはセキュリティ上の理由から最終的には含まれません。この仮定は正しいですか? – 0x6d6e

+0

.ipaはdSYMを必要とせず、.ipaの一部としてApp Store経由ですべての顧客に配布されますが、あなたはそれを望んでいません(スタックに応じて> 1GBのサイズ)。 – Kerni

関連する問題