天天看點

ndk-gdb時提示應用不可調試的解決方法

在開發包含c/c++本地代碼的android項目中,通過gdb來調試代碼是必不可少的前提。

android官方為此提供了ndk-gdb,看起來非常之nice。但個人在實踐中發現還是有一系列問題需要記載下(ndk版本:r10e):

1) ndk-build NDK_DEBUG=1這個選項編譯時要加上,一般将之定制在你的c/c++ builder中

2) 即便你按照1)做了,在項目根目錄運作ndk-gdb的時候還是會報以下錯誤:

ERROR: Package faywong.github.io.mediakit is not debuggable ! You can fix that in two ways:

Rebuilt with the NDK_DEBUG=1 option when calling 'ndk-build'.

Modify your manifest to set android:debuggable attribute to "true",

After one of these, re-install to the device!

然後我們乖乖地跑到AndroidManifest.xml裡邊去修改Application标簽的debuggable屬性,eclipse會提示你不能hardcode,可以通過如下方式設定下:

QQ20151012-1

3) 接下來還有可能會遇到如下問題:

ERROR: Could not find gdb.setup under ./libs/

這是由于ndk-gdb指令的bug帶來的,它沒有去參照ABI的不同設定去不同的目錄下找gdb.setup檔案(是一個腳本檔案,幫你做一些繁瑣的gdb server的啟動,gdb client的啟動和設定等任務)。

簡單繞過這個錯誤的方式是将libs/{your abi, e.g. armeabi-v7a}裡的gdb.setup直接拷貝至libs目錄下

4) 在你跋山涉水,翻山越嶺走了這麼久之後,再次運作ndk-gdb,會出現以下驚喜:

ERROR: Non-debuggable application installed on the target device.

現在可以結合gradle-experimental插件和ndk中搭載的lldb + android studio 2.0斷點native代碼了,雖然還不那麼完善,bug多多,但是相比過去的ndk-gdb時代還是進步一點了。

繼續閱讀