在Android原生ndk中记录变量的值

Logging values of variables in Android native ndk

本文关键字:变量 记录 Android 原生 ndk      更新时间:2023-10-16

我在Android NDK中使用C++设置了日志记录。

我可以向logcat打印这样的消息:

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

现在假设我有一个名为testint的整数。如何打印此int的值?

像这样的东西打印地址,但我想要值。我在C++中没有找到任何关于如何做到这一点的内容。谢谢你的帮助!

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

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

#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,它使用类似sprintf的语法,将数据格式化为字符串。

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

利用现有的可变日志打印功能。对于我自己的代码,我提供了一个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);
}

__android_log_print()接受一个格式字符串和一个变量参数列表。您要打印出带符号整数的格式说明符是"%d"。所以像这样的东西就是你想要的:

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

有关格式化字符串的更多信息,您可以参阅sprintf手册。