Подтвердить что ты не робот

C/С++ printfs - Где он появляется в исходном коде Android?

Так как довольно сложно отладить собственный код Android, я перехожу к подходу "printf trace".

Итак, мой вопрос заключается в том, что в собственном коде стандарты "printf (" something ") появляются при запуске приложения Android?

4b9b3361

Ответ 1

Войдите в logcat.

1) Чтобы вызвать регистратор в собственном коде, включите заголовок и вызовите _android_log_write (..).

#include <android/log.h>

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

2) В вашем Android.mk файле содержится лог файл, подобный этому.

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

Ответ 2

Для входа в logcat доступны более короткие макросы.

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

ALOGD("Format this %d", some_int);

В Android.mk добавьте библиотеку liblog в LOCAL_SHARED_LIBRARIES при сборке в 'mydroid' (полная сборка системы Android). В случае сборки LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -Llog можно использовать LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -Llog.

include $(CLEAR_VARS)
LOCAL_MODULE    := foo
LOCAL_SRC_FILES := foo.c
# if mydroid
LOCAL_SHARED_LIBRARIES := liblog
# in ndk, use LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog instead
include $(BUILD_EXECUTABLE)

Существуют различные другие макросы, определенные для всех уровней ведения журнала. Из cutils/log.h:

#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__))