本帖最后由 lxp 于 2017-7-22 10:18 编辑
一.ALOG 参考:system/core/include/cutils/log.h 以ALOGV为例: - #ifndef ALOGV
- #define __ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
- #if LOG_NDEBUG
- #define ALOGV(...) do { if (0) { __ALOGV(__VA_ARGS__); } } while (0)
- #else
- #define ALOGV(...) __ALOGV(__VA_ARGS__)
- #endif
- #endif
复制代码- /*
- * Basic log message macro.
- *
- * Example:
- * ALOG(LOG_WARN, NULL, "Failed with error %d", errno);
- *
- * The second argument may be NULL or "" to indicate the "global" tag.
- */
- #ifndef ALOG
- #define ALOG(priority, tag, ...) \
- LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__)
- #endif
复制代码- /*
- * Log macro that allows you to specify a number for the priority.
- */
- #ifndef LOG_PRI
- #define LOG_PRI(priority, tag, ...) \
- android_printLog(priority, tag, __VA_ARGS__)
- #endif
复制代码- #define android_printLog(prio, tag, fmt...) \
- __android_log_print(prio, tag, fmt)
- #define android_vprintLog(prio, cond, tag, fmt...) \
- __android_log_vprint(prio, tag, fmt)
复制代码
__android_log_print(prio, tag, fmt)在 liblog 中的 logd_write.c 中实现了. 再来看一下LOG_NDEBUG - #ifndef LOG_NDEBUG
- #ifdef NDEBUG
- #define LOG_NDEBUG 1
- #else
- #define LOG_NDEBUG 0
- #endif
- #endif
复制代码
LOG_NDEBUG受到NDEBUG的影响 因此,想在logcat中利用ALOG打印log,分以下2步 1.在c,c++层添加 - #include <cutils/log.h>
- #undef NDEBUG //取消NDEBUG的定义
复制代码
2.定义LOG_TAG
- /*
- * This is the local tag used for the following simplified
- * logging macros. You can change this preprocessor definition
- * before using the other macros to change the tag.
- */
- #ifndef LOG_TAG
- #define LOG_TAG NULL
- #endif
复制代码 在文件中定义TAG#define LOG_TAG "ProjectName" 这样就可以在logcat中查看Tag为ProjectName的日志
3.在需要调用Log的地方执行:ALOGV,ALOGD,ALOGI,ALOGW,ALOGE。
二.直接调用__android_log_print 1.在Android.mk文件中加入LOCAL_LDLIBS := -llog 或 LOCAL_SHARED_LIBRARIES := \ libutils \ liblog \ libcutils 2.在CPP文件中加入 - #include <android/log.h>
- #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "ProjectName", __VA_ARGS__);
复制代码
ANDROID_LOG_DEBUG是LOG的等级中的debug其他等级分别是 Verbose,Debug,Info,Warn,Error
"ProjectName"是Log中的Tag
__VA_ARGS__是要打印的内容
3.直接在代码中调用LOGD("XXXXX"),就可以在logcat中查看调试信息 |