0

私はこの手法を使用して、クラッシュ レポートを理解しています (これが初めての場合はご容赦ください)。

クラッシュレポート:

最後の例外バックトレース (フレームワークではなく、私のプログラムからの最後の 2 行):

「アプリ名」0x0002c93e 0x2b000 + 6462

「アプリ名」0x0002c3f0 0x2b000 + 5104

ターミナルで次のように入力します。

atos -arch armv7 -o 'アプリ名'.app/'アプリ名' 0x2b000 + 6462

そして戻ってきます:

-[CameleonInCallNumberListViewControler callChange] ('appname' 内) + 6464

+

-[CameleonAppDelegate applicationWillEnterForeground:] (「アプリ名」内) + 546

そして最後の行

atos -arch armv7 -o Caméléon.app/Caméléon 0x2b000 + 5104

そして戻ってきます:

-[CameleonInCallNumberListViewControler callChange] ('appname' 内) + 6464

+

-[CameleonAddressbookViewController gPressed] ('appname' 内) + 88

だから私の質問は、なぜ 1 つだけではなく 2 つのセレクター/メソッド シグネチャが表示されているのですか?クラッシュした行番号を取得する方法はありますか?

4

3 に答える 3

2

2 つの数値を指定しているため、ツールは 2 つの方法を見つけています。

atos -arch armv7 -o Caméléon.app/Caméléon 0x2b000 + 5104
                                            ^1       ^2

これらは分離されているため、別の引数として扱われます。スタック トレースの各行の最初の数字だけを使用する必要があります。

'appname' 0x0002c93e 0x2b000 + 6462
           ^

この番号は、関数呼び出しの実際のアドレスです。使用している次の数字は、メソッドの開始位置とそのメソッドのオフセットです。これが、各テストの最初の結果が同じであった理由です。それらは同じ行ではなく、同じメソッド内で発生しました。

于 2012-10-08T19:42:25.547 に答える
1

ughoavgfhwの答えの延長として:

その呼び出しで得られる結果は 2 つではなく 3 つです。

あなたのatos呼び出しは実際には3つのアドレスをチェックします: 0x2b000 + 6462、それがリターンに3行が表示される理由です! 2 回目は、次の 3 つを確認します。0x2b000 + 5104

アプリのバイナリをチェックする場合は、代わりにこれを使用する必要があります (行番号は返されません!)。

atos -arch armv7 -o 'appname'.app/'appname' 0x0002c93e
atos -arch armv7 -o 'appname'.app/'appname' 0x0002c3f0

行番号も取得したい場合は、atos を呼び出して、代わりに dwarf ファイルを渡します。

atos -arch armv7 -o 'appname'.app.dSYM/Contents/Resources/DWARF/'appname' 0x0002c93e
atos -arch armv7 -o 'appname'.app.dSYM/Contents/Resources/DWARF/'appname' 0x0002c3f0
于 2012-10-08T22:58:15.357 に答える
1

Xcode には、クラッシュ レポートを記号化する機能があります。

問題がある場合は、次のような投稿をご覧ください: Xcode 4 failure to symbolicate Crash Log

また、Crashlytics や Crittercism など、シンボリック化をはるかに簡単にする素晴らしいツールがいくつか出回っています。

====訂正

@Kerniは良い点を指摘しました。これは Last Exception Backtrace であるため、1 つのスレッドです。

====更新

@Kerni はい、QuincyKit と HockeyApp についても良いことを聞きました。省略して申し訳ありません。

于 2012-10-08T17:43:30.033 に答える