0

デバイスのクラッシュログを象徴しようとしています。スタックフレーム、各フレームの命令ポインタアドレス、IPが含まれていたモジュール、およびそのモジュールへのオフセットがあります。私の計画はdladdr()、各スタックフレームアドレスの関数またはメソッドを取得するために使用することです。

アプリを新しく起動したときにこれを実行しようとしているので、ライブラリが現在読み込まれていることや、ライブラリが読み込まれているアドレスがわかりません。dlopen()ライブラリが開いていることを確認するために使用できますが、以前に計算したオフセットを追加するベースアドレスがわかりません。

ライブラリがロードされている場所を特定したり、から返されたハンドルを理解したりする方法はありますdlopen()か?

4

1 に答える 1

1

デバイスでの次の起動時にシンボリック化を行う際の問題は、アプリのバージョンが変更されていないことを確認する必要があることです (それらもシンボリック化したい場合は、行番号を取得しないため、すべきではありません)。 )、iOS のバージョンも同じであることを確認する必要があります。したがって、それらを開こうとすると、必要以上に問題が発生し、失敗する可能性があります。

最も安全で信頼できる方法は、すべてのシンボルを収集でき、独自のアプリ コードの行番号を取得できる Mac またはサーバーでシンボル化することです。

PLCrashReporter を使用してクラッシュ ログを収集しないのはなぜですか? これにより、例外のキャッチやシグナル ハンドラーなど、非常に安全で信頼性の高い方法で必要なことがすべて実行されます。 .20110912.html

https://code.google.com/p/plcrashreporter/と、クラッシュが発生したときのシステム ライブラリの Mac サポートと安全な (!!) シンボル化のためのいくつかの追加機能を備えたフォークを参照してください。 https://github.com/bitstadium を参照してくださいそのフォークを使用する/PLCrashReporterおよびhttps://github.com/bitstadium/HockeySDK-iOS 。

忘れていた 1 つの重要な注意: iOS 6 以降、多くのシンボルがデバイス上でシンボル化されると「編集済み」になります。これを避けたい別の理由があります。

于 2012-10-02T23:03:58.693 に答える