使用GDB調試Android NDK native(C/C++)程式

來源:互聯網
上載者:User

標籤:android   http   os   使用   ar   java   for   strong   檔案   

使用GDB調試Android NDK native(C/C++)程式

先說明下,這裡所謂的ndk native程式跟Android上層java應用沒有什麼關係,也不需要涉及jni來封裝native介面,通俗來講,就是把編譯好的純C/C++程式,push到Android裝置或者模擬器上,然後在裝置上運行該程式。而調試則是通過attach到gdbserver來實現。推薦在Ubuntu或者mac osx下來進行,windows下要安裝cygwin來類比posix環境,速度很慢的說。具體操作如下:


0. 準備工作
首先確保機器上已經有Android開發環境,比如下載了Android SDK以及NDK包,配置了相關環境變數,啟動了Android裝置或者模擬器等等。當然你也需要編譯產生了帶有調試Symbol的Native程式,我是用NDK下的gcc編譯器通過自己配置編譯環境來進行編譯的,當然你也可以直接使用ndk-build。


1. 在裝置上部署gdbserver
所謂部署其實就是把android ndk下的gdbserver拷貝到裝置上,可以通過如下命令
adb push $ANDROID_NDK_ROOT/prebuilt/android-arm/gdbserver/gdbserver /data


2. 在裝置上部署你的Native程式
需要把你編譯出的程式和相關so庫部署到裝置上,注意so庫要放在/system/lib下,/system路徑預設是唯讀,可以通過adb remount來重設。
adb push ./myapp /data/data
adb push ./libmylib.so /system/lib


3. 把裝置上的相關調試環境拷貝到本地
因為遠端偵錯需要一些目標機的庫,把如下檔案拷貝到本地檔案夾
adb pull /system/lib ./debugging/lib
adb pull /system/bin/linker ./debugging/lib


4. 在裝置上通過gdbserver運行你的程式
adb shell gdbserver :12345 /data/data/myapp


5. 在本地把本地TCP連接埠forward到裝置的TCP連接埠
adb forward tcp:12345 tcp:12345


6. 在本地運行Android ndk路徑下的gdb程式
$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuild/darwin-x86/bin/arm-linux-androideabi-gdb
這裡注意如果你在Ubuntu下用的是Linux的NDK包,那路徑會有點不同,darwin-x86的地方應該是linux-x86.最保險的還是自己在NDK下搜尋。


7. 啟動gdb後在gdb下設定solib搜尋路徑
就是讓gdb運行時能夠找到調試相關的那些lib,也就是那些第三步中從裝置上拉下來的檔案。
(gdb) set solib-search-path ./debugging/lib


8. 在gdb下設定你希望調試的Native程式
(gdb) file ./myapp


9. 串連到裝置的gdbserver
(gdb) target remote :12345
上面的6~9步也可以通過如下命令一步執行完
$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuild/darwin-x86/bin/arm-linux-androideabi-gdb --eval-command="set solib-search-path ./debugging/lib"  --eval-command="file  ./myapp" --eval-command="target remote :12345"


10. 開始調試
通過continue或c運行程式。注意不是用run,因為程式在目標機上其實已經啟動了,只是break在程式入口。

 

使用GDB調試Android NDK native(C/C++)程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.