⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logcat.cpp

📁 Android 一些工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    int mode = O_RDONLY;    char *log_device = strdup("/dev/"LOGGER_LOG_MAIN);    const char *forceFilters = NULL;    g_logformat = android_log_format_new();    if (argc == 2 && 0 == strcmp(argv[1], "--test")) {        logprint_run_tests();        exit(0);    }    if (argc == 2 && 0 == strcmp(argv[1], "--help")) {        android::show_help(argv[0]);        exit(0);    }    for (;;) {        int ret;        ret = getopt(argc, argv, "cdgsQf:r::n:v:b:B");        if (ret < 0) {            break;        }        switch(ret) {            case 's':                 // default to all silent                android_log_addFilterRule(g_logformat, "*:s");            break;            case 'c':                clearLog = 1;                mode = O_WRONLY;            break;            case 'd':                mode |= O_NONBLOCK;            break;            case 'g':                getLogSize = 1;            break;            case 'b':                free(log_device);                log_device =                    (char*) malloc(strlen(LOG_FILE_DIR) + strlen(optarg) + 1);                strcpy(log_device, LOG_FILE_DIR);                strcat(log_device, optarg);                android::g_isBinary = (strcmp(optarg, "events") == 0);            break;            case 'B':                android::g_printBinary = 1;            break;            case 'f':                // redirect output to a file                android::g_outputFileName = optarg;            break;            case 'r':                if (optarg == NULL) {                                    android::g_logRotateSizeKBytes                                 = DEFAULT_LOG_ROTATE_SIZE_KBYTES;                } else {                    long logRotateSize;                    char *lastDigit;                    if (!isdigit(optarg[0])) {                        fprintf(stderr,"Invalid parameter to -r\n");                        android::show_help(argv[0]);                        exit(-1);                    }                    android::g_logRotateSizeKBytes = atoi(optarg);                }            break;            case 'n':                if (!isdigit(optarg[0])) {                    fprintf(stderr,"Invalid parameter to -r\n");                    android::show_help(argv[0]);                    exit(-1);                }                android::g_maxRotatedLogs = atoi(optarg);            break;            case 'v':                err = setLogFormat (optarg);                if (err < 0) {                    fprintf(stderr,"Invalid parameter to -v\n");                    android::show_help(argv[0]);                    exit(-1);                }                hasSetLogFormat = 1;            break;            case 'Q':                /* this is a *hidden* option used to start a version of logcat                 */                /* in an emulated device only. it basically looks for androidboot.logcat=      */                /* on the kernel command line. If something is found, it extracts a log filter */                /* and uses it to run the program. If nothing is found, the program should     */                /* quit immediately                                                            */#define  KERNEL_OPTION  "androidboot.logcat="#define  CONSOLE_OPTION "androidboot.console="                {                    int          fd;                    char*        logcat;                    char*        console;                    int          force_exit = 1;                    static char  cmdline[1024];                    fd = open("/proc/cmdline", O_RDONLY);                    if (fd >= 0) {                        int  n = read(fd, cmdline, sizeof(cmdline)-1 );                        if (n < 0) n = 0;                        cmdline[n] = 0;                        close(fd);                    } else {                        cmdline[0] = 0;                    }                    logcat  = strstr( cmdline, KERNEL_OPTION );                    console = strstr( cmdline, CONSOLE_OPTION );                    if (logcat != NULL) {                        char*  p = logcat + sizeof(KERNEL_OPTION)-1;;                        char*  q = strpbrk( p, " \t\n\r" );;                        if (q != NULL)                            *q = 0;                        forceFilters = p;                        force_exit   = 0;                    }                    /* if nothing found or invalid filters, exit quietly */                    if (force_exit)                        exit(0);                    /* redirect our output to the emulator console */                    if (console) {                        char*  p = console + sizeof(CONSOLE_OPTION)-1;                        char*  q = strpbrk( p, " \t\n\r" );                        char   devname[64];                        int    len;                        if (q != NULL) {                            len = q - p;                        } else                            len = strlen(p);                        len = snprintf( devname, sizeof(devname), "/dev/%.*s", len, p );                        fprintf(stderr, "logcat using %s (%d)\n", devname, len);                        if (len < (int)sizeof(devname)) {                            fd = open( devname, O_WRONLY );                            if (fd >= 0) {                                dup2(fd, 1);                                dup2(fd, 2);                                close(fd);                            }                        }                    }                }                break;            default:                fprintf(stderr,"Unrecognized Option\n");                android::show_help(argv[0]);                exit(-1);            break;        }    }    if (android::g_logRotateSizeKBytes != 0         && android::g_outputFileName == NULL    ) {        fprintf(stderr,"-r requires -f as well\n");        android::show_help(argv[0]);        exit(-1);    }    android::setupOutput();    if (hasSetLogFormat == 0) {        const char* logFormat = getenv("ANDROID_PRINTF_LOG");        if (logFormat != NULL) {            err = setLogFormat(logFormat);            if (err < 0) {                fprintf(stderr, "invalid format in ANDROID_PRINTF_LOG '%s'\n",                                     logFormat);            }        }    }    if (forceFilters) {        err = android_log_addFilterString(g_logformat, forceFilters);        if (err < 0) {            fprintf (stderr, "Invalid filter expression in -logcat option\n");            exit(0);        }    } else if (argc == optind) {        // Add from environment variable        char *env_tags_orig = getenv("ANDROID_LOG_TAGS");        if (env_tags_orig != NULL) {            err = android_log_addFilterString(g_logformat, env_tags_orig);            if (err < 0) {                 fprintf(stderr, "Invalid filter expression in"                                     " ANDROID_LOG_TAGS\n");                android::show_help(argv[0]);                exit(-1);            }        }    } else {        // Add from commandline        for (int i = optind ; i < argc ; i++) {            err = android_log_addFilterString(g_logformat, argv[i]);            if (err < 0) {                 fprintf (stderr, "Invalid filter expression '%s'\n", argv[i]);                android::show_help(argv[0]);                exit(-1);            }        }    }    logfd = open(log_device, mode);    if (logfd < 0) {        fprintf(stderr, "Unable to open log device '%s': %s\n",            log_device, strerror(errno));        exit(EXIT_FAILURE);    }    if (clearLog) {        int ret;        ret = android::clearLog(logfd);        if (ret) {            perror("ioctl");            exit(EXIT_FAILURE);        }        return 0;    }    if (getLogSize) {        int size, readable;        size = android::getLogSize(logfd);        if (size < 0) {            perror("ioctl");            exit(EXIT_FAILURE);        }        readable = android::getLogReadableSize(logfd);        if (readable < 0) {            perror("ioctl");            exit(EXIT_FAILURE);        }        printf("ring buffer is %dKb (%dKb consumed), "               "max entry is %db, max payload is %db\n",               size / 1024, readable / 1024,               (int) LOGGER_ENTRY_MAX_LEN, (int) LOGGER_ENTRY_MAX_PAYLOAD);        return 0;    }    //LOG_EVENT_INT(10, 12345);    //LOG_EVENT_LONG(11, 0x1122334455667788LL);    //LOG_EVENT_STRING(0, "whassup, doc?");    if (android::g_isBinary)        android::g_eventTagMap = android_openEventTagMap(EVENT_TAG_MAP_FILE);    android::readLogLines(logfd);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -