2016-11-08 37 views
1

我有一個由基於Java的APK,本機可執行文件和本機庫組成的Android應用程序。 apk通過套接字與本地(根NDK c/C++)可執行文件和庫進行通信。我該如何調試Android本機可執行文件和庫,而不直接集成到APK應用程序中

我不確定它是否重要,但可執行文件和庫是通過cmake編譯的,並被複製爲可執行文件,然後以root身份運行。我需要使用斷點等進行某種類型的調試,而不管它是直接在android studio還是通過命令行。

+0

只要您有本地部分的源代碼並且可以在調試模式下構建它,就可以使用最新版本的Android Studio或命令行lldb或gdb進行調試。您是否嘗試過[這些說明](https://developer3.oculus.com/documentation/mobilesdk/latest/concepts/mobile-studio-debug)? –

+0

我試過以下這些,但是我似乎無法找到當我使用ndk-build時創建的obj目錄。現在我正在使用cmake該目錄似乎不存在。 –

+0

我對Android的cmake用法並不是特別熟悉,但是這一切都歸結爲找到帶有未解決符號的.so文件,只是尋找更大的.so,其大小與其名稱相同 –

回答

0

您需要在設備上運行gdbserver的,讓它連接到你的可執行

gdbserver的是預建的有NDK,通常在<ndk>/prebuilt/android-arm/gdbserver/

  1. 複製gdbserver的二進制文件到您的設備,例如爲了/data/local/tmp並給它chmod

  2. 可執行權限如果你的可執行文件正在運行,發現其與PIDps命令和gdb連接到它:

    gdbserver :5039 --attach <PID>

注意,5039是通常用於與gdb調試端口號,如果你喜歡,你可以使用自己的

  • 設置從裝置到PC中的端口轉發

    adb forward tcp:5039 tcp:5039

  • 運行gdb的局部,注意,您需要手臂有針對性的GDB自帶的NDK太,通常在

    <ndk>toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb

  • GDB和你的進程

    target remote :5039

  • 而且從在這裏您需要使用符合您的調試期望的gdb命令(設置斷點,載入符號,步進等),例如使用cheatsheet或在通訊中提出要求ents

    相關問題