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

Ведение журналов значений переменных в Android ndk

Я установил ведение журнала с помощью С++ в Android NDK.

Я могу напечатать сообщение для logcat следующим образом:

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

Теперь скажем, что у меня есть целое число testint. Как я могу напечатать значение этого int?

Что-то вроде этого печатает адрес, но я хочу значение. Я ничего не нашел в С++ о том, как это сделать. Спасибо за любую помощь!

__android_log_print(ANDROID_LOG_INFO, "sometag", "%p", *test);
4b9b3361

Ответ 1

Вы можете использовать __android_log_print, который использует синтаксис sprintf, который форматирует ваши данные в строку.

__android_log_print(ANDROID_LOG_INFO, "sometag", "test int = %d", testInt);

Ответ 2

Вот наиболее краткий вид, который я видел:

#include <android/log.h>

#define  LOG_TAG    "someTag"

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

...

// Now you can log very simply like this:
int foo = 42;
LOGD( "This is a number from JNI: %d", foo );

Кроме того, убедитесь, что вы подключаетесь к библиотеке журналов в своем Android.mk:

LOCAL_LDLIBS    := -llog

Ответ 3

__ android_log_print() принимает строку формата и список переменных аргументов. Спецификатор формата, который вы ищете для печати целого числа со знаком, - "% d". Итак, вот что вам нужно:

int foo = 42;
__android_log_print(ANDROID_LOG_INFO, "SomeTag", "foo is %d", foo);

Для получения дополнительной информации о строках формата вы можете увидеть руководство sprintf.

Ответ 4

Воспользуйтесь преимуществами функции вариационного логарифмического журнала, доступной вам. Для моего собственного кода я предоставляю функцию LogInfo(), чтобы сделать ее простой. Конечно, здесь есть несколько вариантов.

void LogInfo(const char *sTag, const char *fmt, ...)
{
  va_list ap;
  va_start(ap, fmt);
  __android_log_vprint(ANDROID_LOG_INFO, sTag, fmt, ap);
  va_end(ap);
}