logcat命令学习好文章:
http://blog.csdn.net/hudashi/article/details/7062914
一、 如何将C++的标准输出打印到logcat中
在default状态下调用printf等std C/C++接口输出的log不会被打印到eclipse的logcat中,
但是android提供了__android_log_print这个函数可以将log重定向到eclipse的logcat中.
1) 在对应的mk文件中加入:LOCAL_LDLIBS := -llog
2) 在要使用LOG的cpp文件中加入:
#include <android/log.h>
使用方法如下;
__android_log_print(ANDROID_LOG_DEBUG,"Tag", __VA_ARGS__)
ANDROID_LOG_DEBUG: log的level
Tag:module的tag
__VA_ARGS__:格式化参数列表
例子:
__android_log_print(ANDROID_LOG_DEBUG,"libAirplay", "service URI : %s", "www.163.com.video.xixi.mp4");
3) 直接使用并不是个好的想法,如果能够可以和eclipse一样实现分等级打印,那还不错;实现如下:
#define LOGV(...)__android_log_print(ANDROID_LOG_VERBOSE, " Tag", __VA_ARGS__) // VERBOSE
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , " Tag ", __VA_ARGS__) // DEBUG
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO , " Tag ",__VA_ARGS__) // INFO
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN , " Tag ", __VA_ARGS__) //WARN
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , " Tag ",__VA_ARGS__) // ERROR
注意:括号中是省略号,不用改为参数.
在需要的地方直接使用
LOGV(“www.163.com.video.xixi.mp4”);
或者LOGD(“www.163.com.video.xixi.mp4”); 就好
4) 使用以上的函数打印出的log会出现在eclipse中(前提是:devices已经和PC adb connect了).
其他资料:
如何在shell下将printf打印的信息定向到logcat中:
touch /data/local.prop
vi local.prop 输入log.redirect=true
重启
logcat stdout:* stderr:* *:s
之后就可以看到printf的输出了
或者
adb shell stop
adb shell setprop log.redirect-stdio true
adb shell start
二、 如何输出Jni 接口中LOGV 信息。
在调试android cts问题时, isIEffectCommandSecure 接口中ALOGV("transact status: %d", status);
不会被打印, 看了下面文章才明白。
http://blog.csdn.net/mike8825/article/details/49386725
Android的编译参数中,加入了-DNDEBUG,也就是默认是no debug的,当然还需要LOG_NDEBUG LOG_NIDEBUG LOG_NDDEBUG这三个宏设置。
当-DNDEBUG被打上后,默认ALOGV会被禁止。
在log.h中可以看到
#ifndef LOG_NDEBUG
#ifdef NDEBUG
#define LOG_NDEBUG 1
#else
#define LOG_NDEBUG 0
#endif
#endif
#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
因此, 可以在当前文件的最前面 加入 如下定义, 这样就可以输出
打开ALOGV: #define LOG_NDEBUG 0