当我沉浸在Android C++的世界中,准备通过其相关的ALOGV日志显示出来的时候,却发现怎么在logcat里面也找不到相关的日志,也许对Android ALOG日志有一定了解的会说实在不行通过ALOGD,ALOGW,ALOGE显示出来不就好了。这个是可以做到,但是不能通过相关的宏进行控制不是十分友好,而且如果Android原来的ALOGV打印的很多,难不成一个个的去修改。在本篇章我将带领打过彻底了解ALOGV的控制机制。 注意:ALOG日志等级的优先级秉承如下的顺序: ALOGV < ALOGD < ALOGW < ALOGE ALOG相关定义在system/core/include/log/log.h里面,具体如下: 通过上面的源码我们发现,ALOGV主要受LOG_NDEBUG和LOG_NDEBUG的控制,并且假如你没有定义LOG_TAG 该头文件提供一个默认的为NULL。 好了,对于原理分析清楚了,那么我们要来讲讲万能方法了,这里我们以zygote进程为例说明,其代码路径在frameworks/base/cmds/app_process/app_main.cpp中,我们想要打印出zygote启动传入的参数,添加如下调试信息: 这里我们可以直接在app_main.cpp加上如下代码,就可以打印出所有的ALOGV信息了,同理也可以扩展到其它的模块上面: 相关的打印日志如下: 好了,Android调试源码正确姿势打开ALOGV就这么多了,终极大法就是在你所要打印的C++模块的起始代码端加入如下代码段,就万事OK了。
Android调试源码正确姿势打开ALOGV
前言
一.ALOGV控制相关代码
#ifndef LOG_NDEBUG #ifdef NDEBUG #define LOG_NDEBUG 1 #else #define LOG_NDEBUG 0 #endif #endif /* * This is the local tag used for the following simplified * logging macros. You can change this preprocessor definition * before using the other macros to change the tag. */ #ifndef LOG_TAG #define LOG_TAG NULL #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 #ifndef ALOGD #define ALOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) #endif #ifndef ALOGW #define ALOGW(...) ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) #endif #ifndef ALOGE #define ALOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) #endif
二.ALOGV日志打开万能方法
int main(int argc, char* const argv[]) { ...... if (1) { String8 argv_String; for (int i = 0; i < argc; ++i) { argv_String.append("""); argv_String.append(argv[i]); argv_String.append("" "); } ALOGV("app_process main with argv: %s", argv_String.string()); } ...... }
#define LOG_TAG "appproc" #undef NDEBUG #define LOG_NDEBUG 0
06-04 15:39:00.834 2901 2901 V appproc : app_process main with argv: "-Xzygote" "/system/bin" "--zygote" "--start-system-server" "--socket-name=zygote" 06-04 15:39:16.532 3331 3331 V appproc : app_process main with argv: "/system/bin" "com.android.commands.settings.SettingsCmd" "get" "secure" "bluetooth_address"
结语
#define LOG_TAG "appproc" #undef NDEBUG #define LOG_NDEBUG 0
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算