Android的调试打印接口分析

Android的调试打印接口分析
Android的调试打印接口分析

Android的调试打印接口分析

Android输出Log可以通过使用Android.util中的Log类来实现。android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及Log.e() 。根据首字母对应VERBOSE、DEBUG、INFO、WARN、ERROR。例如,在执行下面的代码后,会输出Log到LogCat View 里:

Log.v("tag", "message");

Java中原有的打印语句System.out.println()的打印也会被输出到LogCat,它的Tag标签是” System.out”

在Eclipse下会通过如下的窗口显示:

在机顶盒命令模式下,则需要执行logcat命令在串口输出打印(或者将打印输出到指定文件)。

1、使用android.util.log的优点

1)功能强大,使用方便

Logcat可以根据调试级别输出不同等级的信息(VERBOSE,DEBUG,INFO, WARN,ERROR),而且可以过滤输出指定tag的调试信息;

2)系统自动添加调试信息,定位问题快捷

程序异常退出、强制关闭、长时间无响应时,系统会自动生成log打印。包括系统基本信息(内存,CPU ,进程队列,虚拟内存,垃圾回收等)、时间信息和虚拟机信息(包括进程的,线程的跟踪信息)。

2、使用android.util.log的缺点

中间件其它模块的打印最后统一由rocme_porting_dprintf()实现,独独android的java输出使用了自己的底层实现(调用Linux的write( int fildes, const void*

buf,size_t nbyte )),不够统一。

3、Android中Java打印在底层改由rocme_porting_dprintf()实现的优点

中间件打印最后统一由rocme_porting_dprintf()实现,这样只需修改porting就可以实现打印的开关、打印终端的控制(串口、控制台……)。

4、Android中Java打印改由rocme_porting_dprintf()实现的缺点

1)Android log原有的输出等级控制和输出过滤的功能将丧失,Android内部C和C++实现中用LOGV、LOGD、LOGI等分等级输出的打印将全部会输出,除非rocme_porting_dprintf()也实现分等级输出的功能;

2)Android在运行Java应用的时候,会将每个进程的标准输出sdtout等重定向到/dev/log/下的三个文件(main、radio、events)中进行缓存,执行logcat命令后再重定向到串口进行输出。若改用rocme_porting_dprintf(),则需要其实现将每个进程的标准输出sdtout重定向,

这样会降低系统效率。也可以修改Android实现,一开始就将每个进程的标准输出重定向到我们想要的终端,但这样Android的logcat功能就没有了。

3)Android为了支持logcat及其它我们还未了解的功能,在上百处地方使用了输出重定向。在没有充分了解这些使用意图的前提下,我们直接用rocme_porting_dprintf()替代,存在一定的风险。

相关主题
相关文档
最新文档