在這篇文章中我談到如何使用gdb配合上adb來進行native process除錯.
但是如果除錯的對象是一個apk的話要怎麼辦?
因為apk是以依附在android framework上執行的
所以在/system/bin下面並無法找到一個相對應的process來獲取symbol
解決方法如下:
1. 將apk啟動(這是以attach的方式進行debug, 如果需要從一開始就進入debug mode的話, 請研究一下am的使用方法)
2. 在平台上找到apk的process id 以bluetooth為例
# ps | grep bluetooth
bluetooth 4040 2412 665656 24064 ffffffff 400f6004 S com.android.bluetooth
3. 將gdbserver attach上去
# gdbserver :5039 --attach 4040
4. 在pc端進行adb forward
$ adb forward tcp:5039 tcp:5039
5. 將gdbclient attach到app_process上
這裡就是重點了
所有的apk其實都是從app_process spawn出來的
所以可以藉由app_process找到正確的symbol
$ gdbclient app_process
這樣就大功告成
Enjoy!
參考資料:
1. http://blog.csdn.net/androidsecurity/article/details/8859313
gdbclient怎么attach到app_process?gdbclient不是先需要target remote才能附加到调试器上吗
回覆刪除app_process是本機端的
刪除也就是out/target/product/xxx/system/bin/app_process
谢谢。所以你说的应该是调试系统应用吧,out是android source编译后的目录。如果我要调试自己的apk,是不是也可以用这个app_process?
刪除可以,但只能debug JNI以下
刪除java層除了使用eclipse外
我還沒有發現別的方法