web-dev-qa-db-ja.com

iOSでdSYMファイルを使用してクラッシュログをデコードする方法は?

IOSアプリケーションがクラッシュしました。 dSYMファイルでクラッシュログを読みたいのですが。どうしてそれは可能ですか?

18
MMMM

まず、dSYMファイル、アプリケーションファイル、クラッシュログの3つのファイルが必要です。

Xコードを開き、プロジェクトナビゲーターでProductsフォルダーを表示し、アプリファイルを「ShowinFinder」で表示します。ここには、dSYMファイルもあります。それらをフォルダにコピーします。

ターミナルを開き、前に2つのファイルをコピーしたフォルダーに移動します。実行:dwarfdump --uuid Application_name.app/Application_nameアプリケーションのUUIDを受け取る必要があります。次のコマンドを実行します。dwarfdump --uuid Application_name.app.dSYM-以前に受信したUUIDと一致するUUIDを再度受信します。

クラッシュログ(Xコード-オーガナイザー-クラッシュ)を開き、「バイナリイメージ」のタイトルが表示されている行を見つけます。これが最初の行の別のUUIDであり、これは以前に端末で受信したものと再び一致するはずです。

これで、調査しているビルドにクラッシュが記録されたことが確認されたので、クラッシュログファイルを再度開いて、スレッド0セクションを見つけます。アプリケーション名と、アドレスが2行あるはずです。といった:

Application_name 0x123456
Application_name 0x987654

ターミナルで今すぐ実行する必要があります:atos -Arch armv7 -o address1 address2(address1とaddress2は前の2つのアドレスに置き換え、armv7はシステムのアドレスに置き換える必要があります。UUIDを取得した行に表示されます)。

ハッピーデバッグ!

編集:私は言及したいと思います this 私のベースとしての投稿。

35
MMMM

インスピレーション

https://developer.Apple.com/library/archive/technotes/tn2151/_index.html#//Apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATEWITHXCODE

dsymファイルを取得する手順

  • アーカイブ用のiOSアプリをビルドする
  • MyApp.xcarchiveを抽出します
  • そのファイルの中に、dSYMファイルがあります。

デバイスのクラッシュログを取得します

.crashファイルをデバイスからプルします。私は通常これにxCodeを使用します。

行ごとの方法

atos -Arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc

0x1000e4000 = address of your app's image
0x00000001000effdc = is the stripped name of the symbol you want to turn into a readable name

プロメソッド

symbolicatecrash実行可能ファイルの場所を取得します。

XCode 9では、必要なファイルは次のとおりです。

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

シンボリッククラッシュログをターミナルに出力します

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

./symbolicatecrash -v crash_log_20_9_2018.crash myapp.app.dSYM

読書

ここでatosの優れた手順: クラッシュログXcodeをシンボリック化する方法は?

ここでdsymファイルなしで同じことを実行する方法: https://medium.com/@Mrugraj/crash-re-symbolication-5c28d3a3a88

1
rustyMagnet

実際には、dSYMファイルをデコードすることはできませんが、そこからエラーの詳細を取得します1.ログファイルからクラッシュスレッドとアドレスを見つけます:次は0x0nnnです2.ログファイルからネイティブコードタイプを見つけます:次はarm64です
3。 dSYMファイル(シンボルファイル)を見つけ、.xcarchiveから抽出します。以下はxx.app.dSYMです。

dwarfdump --lookup 0x0nnn --Arch=[arm64 armv6 armv7] xx.app.dSYM
1
BollMose