Android LOG使用

1. 场景

想调试zygote的程序,C++写的,需要AVLOG宏打印调试信息。

2. AVLOG

打开AVLOG

在文件system/core/liblog/include/log/log_main.h中:

#ifndef LOG_NDEBUG                                                              
#ifdef NDEBUG                                                                   
#define LOG_NDEBUG 1                                                            
#else                                                                           
#define LOG_NDEBUG 0                                                            
#endif                                                                          
#endif 

在文件frameworks/ex/framesequence/jni/utils/log.h定义如下:

/*                                                                                 
 * Simplified macro to send a verbose log message using the current LOG_TAG.       
 */                                                                                
#ifndef ALOGV                                                                      
#if /*                                                                                 
 * Simplified macro to send a verbose log message using the current LOG_TAG.       
 */                                                                                
#ifndef ALOGV                                                                      
#if LOG_NDEBUG                                                                     
#define ALOGV(...)   ((void)0)                                                                        
#else                                                                              
#define ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))                 
#endif                                                                             
#endif                                                                      

如果打开ALOGV,满足两个条件:1. 没有定义ALOGV 2. LOG_NDEBUG为0。
ALOGV没有定义,显然LOG_NDEBUG为0满足进行。

在log_main.h中,LOG_NDEBUG为0,需要满足两个条件:
1)没有定义LOG_NDEBUG。
2)没有定义NDEBUG。

在app_main.cpp添加如下语句:

  8 #define LOG_TAG "appproc"                                                       
  9                                                                                 
 10 #undef LOG_NDEBUG                                                               
 11 #undef NDEBUG                                                                   
 12                                                                                 
 13 #include <stdio.h>                                                              
 14 #include <stdlib.h>                                                             
 15 #include <sys/prctl.h>                                                          
 16 #include <sys/stat.h>                                                           
 17 #include <unistd.h>  

添加10行和11行语句,便可以打开调试信息。

3. 测试

代码调试信息:

190 int main(int argc, char* const argv[])                                                                   
191 {                                                                                                        
192     //if (!LOG_NDEBUG) {                                                                                 
193     if(1) {                                                                                              
194       String8 argv_String;                                                                               
195       for (int i = 0; i < argc; ++i) {                                                                   
196         argv_String.append("\"");                                                                        
197         argv_String.append(argv[i]);                                                                     
198         argv_String.append("\" ");                                                                       
199       }                                                                                                  
200       ALOGV("app_process main with argv: %s", argv_String.string());            
201     }                                                                                                    
202                                                                                                          
203     AppRuntime runtime(argv[0], computeArgBlockSize(argc, argv));               
204     // Process command line arguments                                                                    
205     // ignore argv[0]                                                                                    
206     argc--;                                                                                              
207     argv++;                                                                                              
208     ALOGV("tom app_run=%d", __LINE__);  
354     if (zygote) {                                                               
355     ALOGV("tom app_run=%d", __LINE__);                                          
356         runtime.start("com.android.internal.os.ZygoteInit", args, zygote);      
357     } else if (className) {                                                     
358     ALOGV("tom app_run=%d", __LINE__);                                          
359         runtime.start("com.android.internal.os.RuntimeInit", args, zygote);     
360     } else {                                                                    
361     ALOGV("tom app_run=%d", __LINE__);                                          
362         fprintf(stderr, "Error: no class name or --zygote supplied.\n");        
363         app_usage();                                                            
364         LOG_ALWAYS_FATAL("app_process: no class name or --zygote supplied.");   
365     }                                                                           
366 }  

通过logcat查看调试信息,因为LOG_TAG是appproc。
123
过滤LOG_TAG=appproc

logcat -s appproc

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章