本文共 5783 字,大约阅读时间需要 19 分钟。
想调试zygote的程序,C++写的,需要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 #include14 #include 15 #include 16 #include 17 #include
添加10行和11行语句,便可以打开调试信息。
代码调试信息:
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。
logcat -s appproc
转载地址:http://fofab.baihongyu.com/