AndroidでGDBを使用してアプリケーションをデバッグしたいのですが、gdbとプロセス番号を使用してアプリケーションをフックできますが、最初からアプリケーションが何をするのかを確認したいと思います。
それを行う方法はありますか?
AndroidでGDBを使用してアプリケーションをデバッグしたいのですが、gdbとプロセス番号を使用してアプリケーションをフックできますが、最初からアプリケーションが何をするのかを確認したいと思います。
それを行う方法はありますか?
ルート権限を取得されたデバイスまたはエミュレーターでは、gdbをzygoteに接続し、新しくフォークされたプロセスが起動中のアプリケーションのIDを引き継ぐところにブレークポイントを設定できる場合があります。
デバッガーが接続するのを待つようにzygoteを変更した場合は、おそらく最も簡単です。Jdwpデバッグシステムには、そのコードの起動の早い段階でJavaデバッガーに入ることができるこのようなものがあると思いますが、すでに組み込まれているgdbに匹敵するものはわかりません。 jdwpの場合は、javaデバッガーをアタッチ(およびデタッチ)する前にgdbをアタッチします。
更新:これを試しました。gdbを使用してzygoteにアタッチし、子が早い段階で実行する1ワードのコードを変更して無限ループに入り、zygoteから切り離しました。新しい子が「ps」に表示されたらすぐにgdbし、続行できるように復元することにしました。問題は、私がすべてのコマンドを入力するよりも早く子供が殺されていることです(おそらく応答がないため)。したがって、それはプログラムによって行われる必要があります。そして、それを止めて殺さずに早い段階で見ることができるものはそれほど多くないかもしれません-おそらくそこにstraceを入れることができるということですが、ソースを読むことから学ぶことができないことを何を学びたいですか?
OMAPpediaのAndroidデバッグページには、gdbclientの使用に関する概要が記載されています。
gdbclient <executable name> <port number> <task name>
adb
次のように、最初にポートフォワードを設定する必要がある場合があります。
adb forward tcp:5039 tcp:5039