2013-03-11 76 views
2

我在PC上寫了一些視頻流(C++),現在我嘗試在Android上實現相同的跨平臺部分。我用NDK「玩」了足夠的東西,並且知道如何編譯和整合C代碼與Android(又名JNI)。如何使用Eclipse在Android上調試C++代碼?

問題是,有時候我的應用程序崩潰了,正如你所知道的,Android並沒有指出我代碼失敗的地方(在C/C++部分)。

視頻流媒體代碼有很多庫,可以說,我使用的開源部分留下了日誌 - 這不是個好主意。 我使用Eclipse,如何調試C++代碼或者Eclipse是否有任何插件來調試?

非常感謝,

回答

3

要記錄的東西,看到它在Android的logcat的,我有一個簡單的類爲:

#ifndef LOG_H_ 
#define LOG_H_ 

#include <android/log.h> 

#define LOGD(LOG_TAG, ...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) 
#define LOGI(LOG_TAG, ...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) 
#define LOGV(LOG_TAG, ...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__) 
#define LOGW(LOG_TAG, ...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__) 
#define LOGE(LOG_TAG, ...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) 

#endif /* LOG_H_ */ 

你可以用這種方式:

LOGI("YourClassTag","let's print some stuff: %i, %s", 4, "I'm a string"); 

若要獲取有關崩潰的更多信息,您可以嘗試啓用JNICheck與adb:

如果你有一個常規設備,可以使用下面的命令:

adb shell setprop debug.checkjni 1 

這不會影響已經運行的應用程序,但是從 點發動的任何應用程序將啓用CheckJNI。 (該屬性更改爲任何其他 值或者乾脆重新啓動將禁用CheckJNI再次)在這種情況下, 你下一次看到這樣的事情在你的logcat輸出 應用程序啓動:

d晚啓用CheckJNI

+0

+1 for'debug.checkjni' – 2013-03-11 21:33:04

3

本機代碼的GDB(GNU Debugger)從Android 2.2(SDK級別8)開始可用。

在命令行中使用選項NDK_DEBUG=1重建NDK代碼。啓動應用程序。然後調用Windows或Cygwin命令行中的「ndk-gdb」命令,而項目下的jni文件夾是當前的。你會得到一個GDB控制檯。鍵入c,然後按Enter鍵繼續執行程序(當GDB連接時它會暫停)。儘管如此,它並不適合精神薄弱的人。 GDB因其簡潔的界面而聞名。但至少它會在發生崩潰時爲崩潰(bt命令)提供堆棧回溯。

您也可以將GDB連接到在早期版本的Android上運行的進程,但該過程相當複雜。

GDB參考號是here

相關問題