在Android本机ndk中loggingvariables的值

我在Android NDK中使用C ++设置日志logging。

我可以打印一条消息logcat像这样:

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

现在让我们说我有一个整数称为testint 。 我怎样才能打印这个int的值?

这样的东西打印的地址,但我想要的价值。 我还没有find任何关于如何做到这一点的C ++ 。 谢谢你的帮助!

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

您可以使用__android_log_print ,它使用类似sprintf的语法将数据格式化为string。

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

这是我见过的最简洁的方式:

 #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 

__android_log_print()采用格式string和可变参数列表。 您想要打印出有符号整数的格式说明符是“%d”。 所以这样的事情是你想要的:

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

有关格式string的更多信息,请参阅sprintf手册 。

利用可用的可变日志打印function。 对于我自己的代码,我提供了一个LogInfo()函数来简化它。 当然,这里有几种可供select的选项。

 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); }