26

iOS クラッシュ レポートの場合、クラッシュ レポートをオーガナイザーにドラッグ アンド ドロップするだけで十分です。

iPhone アプリのクラッシュ レポートのシンボル化

ただし、この方法は Mac OSX のクラッシュ レポートには使用できません。

Mac OSX クラッシュ レポートをシンボル化するにはどうすればよいですか?

ありがとう !!

4

3 に答える 3

50

atos コマンドを使用して、アプリがクラッシュした行番号を取得できます。

クイックガイドを次に示します。

  1. 作業ファイル用のディレクトリを作成します
  2. Xcode を開き、[ウィンドウ] -> [オーガナイザー] を選択し、[アーカイブ] タブに移動して、クラッシュが発生したアプリのバージョンを見つけます。
  3. アプリ アーカイブを右クリックし、[Show in Finder] を選択します。
  4. .xarchive を右クリックして [Show Contents] を選択し、AppName.dSYM ディレクトリとアプリを見つけて作業フォルダーにコピーします。
  5. スタック トレースを作業フォルダーにコピーします。
  6. ターミナルを開き、作業フォルダーに移動します。ls は YourApp.app YourApp.app.dSYM stacktrace.txt を表示する必要があります
  7. TextEdit でスタック トレースを開きます。ヘッダー (システム アーキテクチャ - X86-64 など) とクラッシュのアドレスからコード タイプを見つける必要があります。スレッドを検索してクラッシュしたスレッドを見つけ (「Thread 2 Crashed」のように表示されます)、オブジェクトを見つけます。コード行を取得するには、その行から 2 つのアドレス (16 進数) が必要です。
  8. 必要な情報をすべて取得したら、ターミナルで次のコマンドを実行します。

    atos -o YourApp.app/Contents/MacOS/YourApp -arch x86_64 -l [ロードアドレス] [アドレス]

たとえば、スタックトレースからの抜粋を次に示します。

Process:         MyApp [228]
Path:            /Applications/MyApp.app/Contents/MacOS/MyApp
Identifier:      uk.co.company.app
Version:         1.0 (1)
App Item ID:     774943227
App External ID: 218062633
Code Type:       X86-64 (Native)
Parent Process:  launchd [154]
Responsible:     MyApp [228]
User ID:         501

Date/Time:       2013-12-17 10:20:45.816 +0100
OS Version:      Mac OS X 10.9 (13A603)
Report Version:  11
Anonymous UUID:  7AA662B1-7696-A2C5-AF56-9D4BA2CE9515


Crashed Thread:  2

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000

<snip>

Thread 2 Crashed:
0   libsystem_kernel.dylib          0x00007fff8b95a866 __pthread_kill + 10
1   libsystem_pthread.dylib         0x00007fff8bf4f35c pthread_kill + 92
2   libsystem_c.dylib               0x00007fff87571bba abort + 125
3   libsystem_malloc.dylib          0x00007fff897ae093 free + 411
4   uk.co.company.app           0x0000000103580606 0x10356e000 + 75270
5   uk.co.company.app               0x00000001035803da 0x10356e000 + 74714
6   com.apple.Foundation            0x00007fff8d00970b __NSThread__main__ + 1318
7   libsystem_pthread.dylib         0x00007fff8bf4e899 _pthread_body + 138
8   libsystem_pthread.dylib         0x00007fff8bf4e72a _pthread_start + 137
9   libsystem_pthread.dylib         0x00007fff8bf52fc9 thread_start + 13

「コード タイプ」が x86_64 であり、スレッド 2 がクラッシュし、4 行目でコードが実行されていたので、必要なアドレスが取得されていることがわかります。この情報を使用して、次を実行します。

$ atos -o MyApp.app/Contents/MacOS/MyApp -arch x86_64 -l 0x10356e000 0x0000000103580606

これは以下を返します:

got symbolicator for MyApp.app/Contents/MacOS/MyApp, base address 100000000
obj_free (in MyApp) (somefile.c:135)

somefile.c の 135 行目でアプリがクラッシュしたと教えてくれました

于 2013-12-20T10:21:04.550 に答える
20

上記の@inkjetのコメントは、独自の回答に値します。彼は、dsym と .crash ファイルから完全なシンボリック化を行うアプリを構築しました。

私が作成した Sumbolon の無料の代替品: bch.us.to/apps/macsymbolicator — 以下の Rich Able が説明したのと同じ方法で atos を使用します。— インケット

すべてを一緒に入れて:

  1. ここから Mac Symbolicator をダウンロードします

  2. Xcode を開き、[ウィンドウ] -> [オーガナイザー] を選択し、[アーカイブ] タブに移動して、クラッシュが発生したアプリのバージョンを見つけます。

  3. アプリ アーカイブを右クリックし、[Show in Finder] を選択します。

  4. .xarchive を右クリックし、[コンテンツの表示] を選択して、AppName.dSYM ディレクトリを見つけます。

  5. .crash ファイルと AppName.dsym を Sumbolon にドラッグします

  6. 魔法が起こる

于 2015-04-02T16:20:40.067 に答える