android各层中加入log语句的方法整理如下.

1. Android java代码

(a) 导入log包

import android.util.Log;

(b) 定义log标签

private static final String TAG = "DeviceStorageMonitorService";

当然我们也可以定义自己的标签, 以便在从上到下中, 只打印我们自己关注的log

private static final String MYTAG = "MytagTest";

(c) 添加log语句, Log的输出有 : v, i, d, w, e 五种级别


d)打印相应标签的log信息 ,只需要敲入如下命令即可.

logcat -s MytagTest

2.Kernel代码 printk

#include <linux/printk.h>

#define DBG(x...) printk(x)

DBG("%d::%s acc_irq=%d\n",__LINE__, __func__, switch_data->acc_irq);



/* If you are writing a driver, please use dev_dbg instead */
#if defined(DEBUG)
#define pr_debug(fmt, ...) \
printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#elif defined(CONFIG_DYNAMIC_DEBUG)
/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
#define pr_debug(fmt, ...) \
dynamic_pr_debug(fmt, ##__VA_ARGS__)
#else
#define pr_debug(fmt, ...) \
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#endif


for example : ---------------------------> pr_debug("kobject: '%s' (%p): %s\n", kobject_name(kobj), kobj, __func__);



3. NDK开发 jni C代码

#include<android/log.h>

static const char *TAG="libgpio"

#define LOGI(fmt,args...) ((void) __android_log_print(ANDROID_LOG_INFO,TAG,fmt,##args)

#define LOGD(fmt,args...) ((void) __android_log_print(ANDROID_DEBUG_INFO,TAG,fmt,##args)

#define LOGE(fmt,args...) ((void) __android_log_print(ANDROID_ERROR_INFO,TAG,fmt,##args)

LOGI("open path=%s",path)


  

4.Android c/c++代码

在各种jni, hal层, 驱动层都是c和c++的代码, 在这里插入log, 可以帮助我们找到上层调用下来的参数是多少, 调用的是哪个具体函数等.

(a) 添加tag标签,

#define LOG_TAG "LightSensor"

(b) 引入log库

#include <utils/Log.h>

(c) 加入log语句

在这一步中, 和java不同的是, 不能加入不同的tag标签只能用当前源文件的标签,即 LOG_TAG

LOGI("LightSensor.cpp -> readEvent() : event->value = %d", event->value);

5. 在mk文件中加入log

很多人都不知道, mk文件在运行的时候(也就是android源码编译的时候)也可以输出log, 这大大的方便我们调试编译信息.

在make文件中有两种log级别error和warning :

$(error TEXT...)$(warning TEXT...)

用error可以准确定位我们需要的log信息, 因为编译会终止, 一般来说终止的地方会有我们的log信息,

warning不会终止在我们的log信息上, 大家可以根据自己的情况来选择.

另外,还可以在编译输出的log语句中加入mk定义的变量信息

举例, 比如我们需要知道libsensors目录下的so编译后叫什么名字, 通过在此目录下的android.mk文件中加入以下代码来输出log:

在LOGCAL_MODULE 的定义之后, 写上

$(error module is $(LOCAL_MODULE))

输出结果:

hardware/sansung/libsensors/Android.mk:27: *** module is Sensors.sansung. Stop.

更多相关文章

  1. Android NDK c调用java代码
  2. Android 代码风格指南
  3. Android px和dip及sp的区别及转换代码
  4. Android - Android Studio 自动(auto)添加import 语句
  5. Android 源代码编译前后的目录结构
  6. Android有用代码片段(三)
  7. Android 通过代码实现控制数据网络的开关(仅适用于5.0以上)

随机推荐

  1. Android(安卓)Fingerprint完全解析(三) :F
  2. Android基础知识之Manifest文件的组织结
  3. android imageView 图片显示方式属性
  4. android的异步加载与UI
  5. Android(安卓)SDK Tools和Android(安卓)S
  6. Android(安卓)面试题9
  7. Android(安卓)SDK Manager国内无法更新的
  8. Android软件安全与逆向分析
  9. android JNI 学习笔记1
  10. Android深入理解Context--Service中Conte