`
yuxiaolongwin
  • 浏览: 28998 次
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Android 底层编译日志添加

阅读更多

 

转载http://blog.csdn.net/hitlion2008/article/details/7757238

调试日志信息

调试日志都是由宏来定义和实现的,并由另外定义的宏来作为开关。

日志开关

Webkit中只有JNI部分是有Log日志的,其他代码都没有加入日志。JNI部分常用的LOG有:

  • DBG_SET_LOG      在external/webkit/Source/WebKit/android/jni/PictureSet.h中定义,开关为PICTURE_SET_DEBUG
  • DBG_SET_LOGD在external/webkit/Source/WebKit/android/jni/PictureSet.h中定义开关为PICTURE_SET_DEBUG
  •  DBG_HANDLE_LOG 在external/webkit/Source/WebKit/android/nav/SelectText.cpp中定义,开关为VERBOSE_LOGGING
  • DBG_NAV_LOG在external/webkit/Source/WebKit/android/nav/CachedDebug.h中定义,开关为DEBUG_NAV_UI
  • DBG_NAV_LOGD在external/webkit/Source/WebKit/android/nav/CachedDebug.h中定义
  • DBG_NAV_LOGV在external/webkit/Source/WebKit/android/nav/CachedDebug.h中定义开关为DEBUG_NAV_UI_VERBOSE
  • DEBUG_PRINT_BOOL在external/webkit/Source/WebKit/android/nav/CachedNode.cpp和CachedRoot.cpp中定义,开关是DUMP_NAV_CACHE
  • DEBUG_PRINT_RECT在external/webkit/Source/WebKit/android/nav/CachedNode.cpp和CachedRoot.cpp中定义,开关是DUMP_NAV_CACHE
  • DEBUG_PRINT_COLOR在external/webkit/Source/WebKit/android/nav/CachedColor.cpp和CachedHistory.cpp中定义,开关是DUMP_NAV_CACHE

添加日志

对于Android的JNI代码或是C/C++层代码添加日志是通过system/core/include/cutils/log.h中定义的一些宏来实现的,log.h定义了这些宏,并有一些调试相关的开关。
LOGV,LOGD,LOGI,LOGW,LOGE
它们的级别是由上向下递增的,这些宏与Java代码android.util.Log中的Log.v,Log.d,Log.i,Log.w ,Log.e都是类似的。通常情况下只有LOGV是关闭的,其他的都是打开的。具体的定义和开关设置可以查看system/core/include/cutils/log.h文件。这些宏都使用了system/core/include/android/log.h中定义的一些方法如__android_log_print,__android_log_write等。
LOGE等这些宏跟print()函数一样可以使用变参,如LOGE(“rect is {%d,%d,%d,%d}”, a, b,c,d);但是查看LOGE宏的定义可以看到,还有一个参数就是宏LOG_TAG,cutils/log.h中定义的默认LOG_TAG是NULL,所以当你使用LOGE这些宏的时候要自己定义一个LOG_TAG。
总结,想要给C/C++ 文件添加日志,需要:

  1. #include <utils/Log.h>把Log.h 文件包含进来
  2. #define LOG_TAG “your log tag”定义LOG_TAG,通常为文件名字,以方便定位到哪个文件
  3. 使用LOGE,LOGW或LOGD等添加打印输出。

-------------------------------------------------更新于2012年7月19日------------------------------------------

如果发现LOGE等无法打印出Log,换用android_printLog试试,它的用法是:

android_printLog(LOG_LEVEL, LOG_TAG, ...),例如:

android_printLog(ANDROD_LOG_ERROR, "FrameLoader", "url is %s", url.string().latin1().data());

如何打印各种变量

对于bool, int, long就用%d就可以了;

对于指针类型可以用%p;

对于字串类型,有点麻烦,在WebKit中有四种字串类型:AtomicString,String, CString, string。但是打印输出中只能用%s来输出字符数组或字符指针,也就是char *类型,所以想要打印字串类型就需要把字串转化为char *类型。

 

  • 对于string,最简单,它是STL中的类型,直接用string.c_str()方法即可
  • 对于CString,它是与平台相关的类,它的方法data()可以返回char *类型,如LOGE("url is %s", url.data());
  • 对于String,要先转化为CString,它的方法latin1()可以转化为CString,再用其data()方法,如LOGE("url is %s", url.latin1().data());
  • 对于AtomicString,要先转化为String,它的方法string()即可得到String类型,如LOGE("url is %s", url.string().latin1().data());

 

可以看出,C++中的打印输出还是非常麻烦的,而Java中所有对象均有toString()方法就大大方便了I/O操作了。还要注意要包含头文件

 

  • #include <CString.h>
  • #include <String.h>
  • #include <AtomicString.h>

 

否则编译会有错误:incomplete type。这跟Java编译器的提示也不一样,Java会直接提示cannot find symbol,相对来说比较直观。

分享到:
评论
1 楼 yuxiaolongwin 2013-01-06  
在webkit, external/webkit/Source/WebCore/platform/android/...
两个步骤

#include "cutils/log.h"
打印log
ALOGE("into fileSystemRepresentation path.utf8: %s", fsRep.data());

相关推荐

    android开发资料大全

    【Android系统原理与开发要点详解】/底层 应用 框架 Android核心分析28篇,强烈推荐android初学者,android进阶者看看这个系列教程 Android应用开发者指南:性能优化 android开发教程合集(推荐新手看下这一季教程)...

    Android技术内幕.系统卷(扫描版)

    1.2 获取和编译android的源码 /13 1.2.1 环境配置 /13 1.2.2 获取android源码 /14 1.2.3 编译android的源码及其工具包 /16 1.2.4 运行android系统 /21 1.3 开发环境搭建 /23 1.3.1 应用开发环境搭建 /23 1.3.2 源码...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android技术内幕.系统卷 pdf

    1.2 获取和编译android的源码 /13 1.2.1 环境配置 /13 1.2.2 获取android源码 /14 1.2.3 编译android的源码及其工具包 /16 1.2.4 运行android系统 /21 1.3 开发环境搭建 /23 1.3.1 应用开发环境搭建 /23 ...

    [多媒体/3D 动画/游戏] Unity3D游戏编程基础入门班 by 泰课在线(价值200元)[高清完整版][AVI+TS][1.43GB]

    Unity3D使用底层Mono技术实现了真正的跨平台,而Mono是基于.NET框架开发的。他使我们使用一种语言就可以开发出基于各种平台的游戏,包括手机游戏(iPhone、Android、Windows Phone)、PC(Windows、Mac、Linux)、...

    java开源包1

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包11

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包2

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包3

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包6

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包5

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包10

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包4

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包8

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包7

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包9

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包101

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    Java资源包01

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

Global site tag (gtag.js) - Google Analytics