標籤:
上次寫了幾個native程式,想著如何調試,經過一陣子搜尋和測試,終於完成了。有幾個關鍵點:
1 gdb和gdbserver因為這兩個需要配套,建議使用同一個ndk下面的gdb和gdbserver
gdbserver的是在 android-ndk-r9\prebuilt\android-arm\gdbserver 這個目錄下gdb 是在 android-ndk-r9\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin 目錄下,名稱是arm-linux-androideabi-gdb.exe2 然後把gdbserver安裝到裝置的 /system/bin下adb push gdbserver /system/bin/adb shell chmod u+x /system/bin/gdbserver3 以DEBUG方式編譯器具體來說,就是 ndk-build NDK_DEBUG=1可以調試的程式在 ..\obj\local\armeabi目錄下,相對於jni目錄4 啟動程式adb push hello /data/local/tmp/adb shell chmod u+x /data/local/tmp/hellogdbserver :8123 /data/local/tmp/hello5 啟動GDB開始調試adb forward tcp:1234 tcp:8123設定adb的轉寄 arm-linux-androideabi-gdb(gdb) file ../obj/local/armeabi/sum載入偵錯工具(gdb) target remote :1234說明遠端偵錯對象(gdb)list顯示代碼(gdb) break main設定斷點(gdb) cont繼續運行6 總結因為gdb本來就支援遠端偵錯,在啟動gdbserver的時候,指定本地調試連接埠,但是由於裝置是通過adb來串連的,所以指定adb來做轉接,在裝置啟動調試後,就等待gdb來串連調試,所以gdb啟動後,指定本地的連接埠,載入代碼,然後就可以調試了
用GDB遠端偵錯android native程式