2011-06-21 11 views
19

ネイティブのアンドロイドコードをデバッグするのはかなり難しいので、私は "printf trace"アプローチに行きます。C/C++ printfs - Androidのネイティブコードはどこにありますか?

私の質問は、ネイティブコードでは、Androidアプリケーションを実行しているときに標準の "printf(" something ")が表示されていますか?

+0

の可能複製(http://stackoverflow.com/questions/5459324/how-to-see-printf-lines-in-gdb) – richq

+0

可能性のある[std :: cout]がAndroid-ndkで使用可能です(https://stackoverflow.com/questions/8870174/is-stdcout-usable-in-android-ndk) –

答えて

42

ログを記録する。

1)ネイティブコードでロガーを起動するには、ヘッダーを含めて_android_log_write(..)を呼び出します。

#include <android/log.h> 

__android_log_write(ANDROID_LOG_INFO, "tag here", "message here"); 

2)あなたのAndroid.mkファイルには、このようなログlibが含まれています。

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
+1

(SYSROOT)/ usr/libとは何ですか? – Nativ

+0

完璧!ちなみに、これは私のテストケースで.mkを編集しなくても動作します。 –

+1

私の場合、 'LOCAL_LDLIBS:= -L $(SYSROOT)/ usr/lib -llog'は機能しませんでした。代わりに 'LOCAL_SHARED_LIBRARIES:= liblog'を使用しなければなりませんでした。 – gfrigon

1

logcatにログインするためのマクロがあります。 Android.mkで

#define LOG_TAG "my_log_tag" 
#include <cutils/log.h> 

ALOGD("Format this %d, some_int); 

'mydroid'(フルAndroidシステム構築)に構築するとき、LOCAL_SHARED_LIBRARIESliblogライブラリを追加します。 ndkビルドの場合LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llogを使用できます。

すべてのレベルのログに対して定義されたさまざまなマクロがあります。 cutils/log.hから:[?GDBでのprintfの行を参照する方法]

#define ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 
#define ALOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) 
... 
#define ALOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) 
関連する問題