3

私はsymbolicatecrashを使用しようとしていますが、興味深い結果が得られています。同僚が私たちのディストリビューション ビルドを別のマシンでビルドしたので、dSYM ファイルを送ってくれました。にあるsymbolicatecrashファイルを実行した後

/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash

それはすべての Apple 機能を満たしますが、私のものではありません。問題は、同僚のマシン情報が含まれている可能性があるため、dSYM ファイルが見つからない (または見つからない) ことのようです。クラッシュ レポートから 16 進アドレスをコピーすると、次のように dwarfdump を使用できます。

dwarfdump --lookup 0x0001f892 --arch armv6 パス/to/MyApp.app.dSYM

その単一の呼び出しの行番号が正しく表示されます。さらに、symbolicatecrash は私たちのコードからゲームの行番号を割り出すことができますが、Apple のコードからはできません。なぜ彼が Apple のものを見ることができないのか私にはわかりませんが、前述のように、問題は dSYM を見つけることにあると私は信じています。

そう。dSYMのパスをsymbolicatecrashコマンドに渡す方法、またはそれを機能させる他の方法はありますか? 真剣に、あなたのファイルをある種の魔法の「検索」を行うツールを作成するのは完全にばかげているからです。

また、同僚のビルドに Apple の機能が表示されない理由はありますか? 私がここにいる間、クラッシュ ファイルの "+" は何を意味するのでしょうか? このような:

0x00059f8c -[UIWindow sendEvent:] + 108

4

1 に答える 1

6

symbolicatecrash は 1 つの巨大なハックです。あなたができる最善のことは、それが期待するとおりに物事を行うことを学ぶことです。または、内部を読んで修正しますが、次のSDK更新のために再修正する必要があります...

この場合、アプリバンドルと同じフォルダーに dSYM ファイルを配置しなかったことが問題だと思います。XCode が残したものとまったく同じである必要があり、スポットライトがそれを見つける場所にある必要があります。さらに、名前が期待どおりであることを確認してください。「dSYM」の大文字と小文字を正確に区別することが重要です。また、バグのためにアプリ名でドットがサポートされていないと聞きました。

疑わしい場合は、常に -v オプションを試して、より詳細なエラー メッセージを取得してください。

Apple バイナリの行番号情報はありません。個人的には、少なくとも関数名を取得できて非常に満足しています。もっとひどかったかもしれません。

「-[UIWindow sendEvent:] + 108」では、関数の先頭から 108 バイトを意味します。このデータの唯一の有用な解釈は、数値が小さい場合はおそらく正確であり、数値が大きい場合はシンボリック化がうまくいかないということです。

于 2010-03-03T07:09:21.200 に答える