3

Androidアプリケーションのダイナミックライブラリ呼び出しをプロファイリングする必要があり、この目的のために「ltrace」ツールを使用してプロファイリングすることにしました。「ltrace」ツールをAndroidパッケージに組み合わせて、正常にコンパイルしました。通常のLinuxコンソールアプリケーションと同じように、シェルプログラムで正常に動作します。

ただし、「Zygote」プロセスからフォークされたAndroidアプリケーションを適切にプロファイリングできません。ltraceを"Zygote"プロセスにアタッチして、その子プロセスを追跡しようとしましたが、SIGCHLDおよびSIGSTOPシグナルしか受信せず、異常終了し、次のエラーが表示されました。

0xffff0508での予期しない命令0xffffffff

誰かがAndroidシステムでこの種のプロファイリングを試したことがあるかどうか疑問に思っています。短いコメントは私にとって非常に役立ちます。

前もって感謝します。

4

2 に答える 2

2

zygoteから分岐した後、Androidアプリケーションのプロセスにltraceをアタッチしてみてください。androidのbioniclibc用に構築されたltraceと、スレッドを適切に処理するltraceが必要になります。

デバッグ可能なAndroidアプリを設定して、Javaデバッガーの接続を待機する方法があります。これを使用して、ltraceを接続し、Javaデバッガーを接続および切断して、再開します。これにより、スタートアップ全体ではありませんが、独自のロジックのほとんどがキャプチャされます。

IIRCは、接続して再開するための時間制限があります。そうしないと、アプリケーションが応答しない状況をトリガーしないように、自動的に再開する可能性があります。

Javaデバッガーを使用して何が起こっているかを確認し、ソースを読んでそれがネイティブ側でどのように実装されているかを確認することで、さらに学習できる可能性があります。

于 2011-08-31T13:27:22.150 に答える
0

クリス・ストラットン氏のやり方はうまくいくでしょう。

LoadLibrary()jniをデバグするためのもう1つのポイントです。

于 2012-04-13T01:38:57.753 に答える