首先需要一臺root過的手機,安裝好BusyBox工具箱,並連接到一臺配置好adb的調試PC。
1、從NDK的prebuild目錄下找到對應手機平臺的gdbserver,上傳到手機,運行遊戲,然後運行
gdbserver --attach 127.0.0.1:6666 PID
其中,PID是要調試的應用的進程ID,可以用top或ps命令查看。6666是要使用的端口號,手機上任意一個沒有被使用的端口都可以。該命令運行之後,被附加的應用會暫停,等待gdb客戶端的連接。
2、打開Windows命令行工具,forward一下端口, adb forward tcp:6666 tcp:6666
3、windows命令行中運行對應手機平臺的gdb工具,通常放在NDK的工具鏈目錄裏面,例如:
toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gdb.exe
4、在gdb中指定遠程目標,運行 target remote:6666
這時候就應該能附加到目標進程上了,然後就像用gdb調試本地程序一樣調試就行了。
附加說明:
有時候會有SIGPWR或者SIGXCPU這樣的信號會讓gdb斷下來,可以用如下的命令忽略掉這些信號:
handle SIGPWR noprint
handle SIGXCPU noprint
另外,手機上的sdcard目錄是不能給文件添加可執行權限的,需要把gdbserver拷貝到內部存儲目錄。但是內部存儲根目錄默認是隻讀掛載的,使用如下的命令用讀寫方式重新掛在即可:
mount -o rw,remount /
有時候,用數據線連接手機比較容易碰到線而讓連接斷開,可以使用adb的TCP連接方式連接手機來解決這個問題。