在Android native ndk中记录变量值

dor*_*ien 50 c++ debugging logging android android-ndk

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

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

__android_log_write(ANDROID_LOG_INFO, "tag here", "message here");
Run Code Online (Sandbox Code Playgroud)

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

像这样的东西打印地址,但我想要的价值.我还没有在C++中找到有关如何执行此操作的任何内容.谢谢你的帮助!

__android_log_print(ANDROID_LOG_INFO, "sometag", "%p", *test);
Run Code Online (Sandbox Code Playgroud)

Ada*_*dam 68

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

#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 );
Run Code Online (Sandbox Code Playgroud)

另外,请确保链接到Android.mk中的日志库:

LOCAL_LDLIBS    := -llog
Run Code Online (Sandbox Code Playgroud)


Ben*_*fez 45

您可以使用__android_log_print哪种sprintf语法将数据格式化为字符串.

__android_log_print(ANDROID_LOG_INFO, "sometag", "test int = %d", testInt);
Run Code Online (Sandbox Code Playgroud)


mah*_*mah 13

利用您可用的可变参数打印功能.对于我自己的代码,我提供了一个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);
}
Run Code Online (Sandbox Code Playgroud)


kel*_*nos 11

__android_log_print()采用格式字符串和变量参数列表.您正在寻找打印出有符号整数的格式说明符是"%d".所以这就是你想要的东西:

int foo = 42;
__android_log_print(ANDROID_LOG_INFO, "SomeTag", "foo is %d", foo);
Run Code Online (Sandbox Code Playgroud)

有关格式字符串的更多信息,请参阅sprintf手册.