[英]Debugging Android NDK C/C++ code in Eclipse - breakpoints are not hit
我下載了適用於Linux和Android NDK的Android SDK Bundle。 安裝了ADT,我安裝了CDT。
我創建了一個Android項目並添加了原生支持(jni)。 然后我在java代碼中編寫了本機函數,用c ++代碼導出。 在c ++代碼中我定義了這個函數。
Java的代碼:
static {
System.loadLibrary("test");
}
private native String get_text_from_cpp();
c ++代碼(h):
extern "C"{
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv *, jobject);
}
c ++代碼(cpp):
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv * env, jobject){
return env->NewStringUTF( "hello from C++" );
}
代碼無誤地運行。 但是當我在c ++代碼中設置斷點時,它沒有被擊中。
build-nkd NDK_DEBUG = 1 - 包括在內
我按照說明http://tools.android.com/recent/usingthendkplugin
jni中的Android.mk /具有LOCAL_CFLAGS:= -g
我已經閱讀了很多信息,但我無法定制Eclipse。 請幫助任何人。
PS:對不起,我的英語不是我的母語。 我寫作有困難。
添加:同樣在控制台顯示調試期間:“警告:無法加載95個庫的共享庫符號,例如/ system / bin / linker。使用”info sharedlibrary“命令查看完整列表。是否需要”set solib- search-path“或”set sysroot“?警告:無法找到動態鏈接器斷點函數.GDB將最終重試。同時,很可能GDB無法調試共享庫初始化程序或在dlopen()之后解析掛起的斷點。”
我使用的技巧是將一個usleep調用作為我的調試代碼中的第一個本機行。
這使您的線程處於睡眠狀態,並為調試器提供為您准備的機會。
#include <unistd.h>
.
.
.
#ifndef NDEBUG
usleep(5000 * 1000);
#endif
掙扎了很多 Eclipse的調試后,這是我的食譜:
做通常的步驟:
android.os.Debug.waitForDebugger();
在加載本機庫之前。 這可能有所幫助。 Application.mk
添加APP_OPTIM := debug
ndk-build NDK_DEBUG=1
然后,我發現了不同的東西:
adb pull /system/bin/linker <your_project_base_dir>/obj/local/armeabi/linker
根據您的設備,您可能需要編寫armeabi
或armeabi-v7a
。 你只需要做一次(我注意到手動運行ndk-gdb
正在這樣做。手動執行該命令斷點開始工作)
您可以使用ARM提供的DS-5 CE Android Debug工具作為eclipse的插件。 它工作得非常好,並為調試提供了一個非常好的和簡單的UI。 根據我的個人經驗,它比調試ndk應用程序的傳統方式要好得多。
請參考以下鏈接,它將為您提供有關如何使用DS-5調試器的詳細信息:
您的應用程序很早就執行了JNI函數,因此調試器還沒有准備好。 不幸的是,gdb建立遠程連接需要一段時間,請參閱http://visualgdb.com/documentation/appstartup
而不是對抗風車,為您的活動添加一個按鈕,並在該按鈕的Click()上調用相同的本機方法 - 捕獲斷點將更容易。
BTW,關於95個庫的警告是完全正常的。 這些是您不想調試的系統庫,並且沒有源代碼。
考慮添加:
android.os.Debug.waitForDebugger();
在您的本機通話之前,這會讓您的應用等到調試器附加,可以幫助您避免睡眠/使用按鈕。
我有這個問題,唯一對我有用的就是投入
Thread.sleep(2000);
在加載JNI庫之前。 在調用System.loadLibrary
崩潰應用程序之前,這給了調試器足夠的時間來附加。 幫我找到問題C ++代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.