在Android原生ndk中记录变量的值
Logging values of variables in Android native ndk
我在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手册。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- GDB / C++ - 根据循环条件将多个变量记录到输出文件中
- 人造人.NDK.如何记录全局变量的调用析构函数
- 为变量和激活记录保留空间
- 在Android原生ndk中记录变量的值
- 将记录集中的变量(具有货币值)转换为格式正确的字符串
- 使用全局变量和函子实现日志记录
- Netcdf C++|如何为单个变量编写记录
- 记录变量的值
- 如何使用 Doxygen 记录C++函数中的局部变量