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

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 NDK编译Android平台的eXosip库

    6. **静态库编译**:如果需要静态库,可以在Android.mk中添加`LOCAL_STATIC_LIBRARIES`或CMakeLists.txt中指定`add_library`的类型为`STATIC`。然后重新编译。 7. **集成到应用**:将生成的`.so`库文件复制到项目的...

    Android的底层库

    本文将深入探讨Android底层库的相关知识点,包括它们的结构、核心组成部分以及如何添加本地程序和库等内容。 #### 二、底层库与程序的结构 Android的底层库和程序构成了系统的基石,确保了Android设备能够稳定高效...

    Android底层开发技术实战详解——内核、移植和驱动

    《Android底层开发技术实战详解——内核、移植和驱动》这本书深入探讨了Android系统的底层机制,包括内核、系统移植以及设备驱动等关键领域。在Android操作系统中,这些部分是构建高效、稳定和功能丰富的应用的基础...

    Android底层接口和驱动开发技术详解-下载代码

    在Android系统中,底层接口和驱动开发是至关重要的部分,它们构成了Android运行的...提供的“Android底层接口和驱动开发技术详解-下载代码”很可能是相关教程或项目的源代码,这对于实际操作和学习是非常宝贵的资源。

    Android 底层驱动原理

    【Android系统架构及其驱动研究】 Android系统架构是一个分层的...以上是对Android底层驱动原理的详细解析,涵盖了系统架构、驱动类别、实例分析等多个方面,为Android开发者提供了深入理解硬件与软件交互的基础知识。

    安卓logcat输出内核日志android studio工程源码

    编译过程中,可能涉及到C/C++的NDK开发,因为内核日志通常需要底层编程知识。 6. **运行和解析日志**:`kernellogd`运行后,会将收集到的内核日志通过adb回传到开发者机器,或者保存在设备本地。解析这些日志通常...

    android底层(内核驱动)开发资料

    本文将深入探讨Android底层开发中的关键知识点,包括内核架构、驱动模型、设备树、以及相关的开发工具和流程。 一、Android内核架构 Android内核基于Linux内核,它负责管理硬件资源、调度任务、处理中断、提供安全...

    android2[1].3源码下载编译过程

    对于Android 2.3(也称为Gingerbread)版本,虽然现在已经较为陈旧,但了解其源码的获取与编译方法有助于理解Android系统的底层工作原理,对开发者来说仍然有价值。以下是关于"android2[1].3源码下载编译过程"的详细...

    android底层详解启动篇

    【Android底层详解启动篇】 Android系统的底层开发是一个深入且复杂的领域,它涵盖了操作系统、硬件交互、驱动程序以及系统服务等多个方面。本篇文章将基于“eoeAndroid特刊”第21期中的“Android启动流程分析”...

    AndroidKiller Windows下的Apk反编译工具特别好用.7z

    除了上述核心功能,AndroidKiller还依赖于一些外部库,例如lua5.3.0.dll是用于脚本支持,而AKCommon.bpl、vcl230.bpl和rtl230.bpl是Delphi开发的组件库,它们为工具提供了丰富的图形界面和底层操作支持。 在实际...

    Androidkiller 最新apktool 已修复反编译时卡死

    6. **调试与日志分析**:在反编译过程中,可能需要分析应用的日志文件(Logcat),`Androidkiller`可能提供了一些辅助功能来帮助开发者定位问题。 7. **代码混淆与反混淆**:部分APK可能采用了代码混淆技术来增加...

    Android底层驱动开发.7z

    这份“Android底层驱动开发”文档很可能包含了深入浅出的讲解,帮助开发者理解并掌握Android驱动开发的核心技术。 一、Android驱动架构 1. Linux内核驱动:这部分驱动运行在内核空间,负责直接与硬件交互,包括...

    Android底层开发技术实战详解:内核、移植和驱动

    《Android底层开发技术实战详解:内核、移植和驱动》这本书深入探讨了Android系统的底层机制,包括内核、系统移植和驱动程序开发等关键领域。作为一本实践性强的技术指南,它为开发者提供了全面且深入的知识点,以下...

    腾讯XLog文件解密,和android 使用的So库

    腾讯XLog就是一个专为Android平台设计的日志打印工具,旨在提供高效、安全的日志记录功能。本文将深入探讨腾讯XLog的文件解密过程以及其在Android应用程序中使用的So(Shared Object)库。 首先,我们要理解XLog的...

    Android JNI 用C函数写本地库读写文件,底层调用小例子

    同时,`__android_log_print`用于在Android日志系统中输出调试信息。 最后,通过NDK工具链编译C代码为.so动态链接库,然后将.so文件放置到Android项目的`jniLibs`目录下,以便在运行时被Java代码加载。 总结起来,...

    【Android系统原理与开发要点详解】04_Android的底层库和程序

    #### 二、Android底层库和程序的结构 Android的底层主要由一系列库和程序构成,这些库和程序支持着整个系统的运行。主要包括以下几个部分: 1. **标准C/C++库bionic**:这是Android系统中使用的一种轻量级C/C++...

    04_Android的底层库和程序-Android课件

    Android底层库和程序不仅支持了系统的稳定运行,还为开发者提供了丰富的API来构建高质量的应用程序。本文将详细介绍Android的底层库和程序的相关知识点。 #### 二、底层库和程序的结构 **1.1 本地实现底层的结构**...

    Android集成CocosCreator项目-demo

    7. **运行与调试**:在完成上述步骤后,你可以通过Android Studio的“Run”按钮来编译和运行项目。如果遇到问题,检查错误日志,根据提示进行修正。 8. **优化与打包**:在项目稳定后,可以进行性能优化和APK打包。...

    ubuntu12.04编译android4.1.1_r6源代码步骤定义.pdf

    在本文中,我们将详细探讨如何在Ubuntu 12.04上编译Android 4.1.1_r6源代码。这个过程对于开发者来说非常...在整个过程中,保持耐心,密切关注编译日志,及时解决出现的问题,最终才能成功编译出定制的Android系统。

Global site tag (gtag.js) - Google Analytics