让adb logcat打印内核调试信息

 在默认情况下,adb logcat只能显示使用程序的调试信息,我把logcat.cpp修改了一下,让它同时可以打印内核调试信息:
system/core/logcat/logcat.cpp
static void readLogLines(int logfd)

{    char buffer[256] = {0};   

    while (1)

          { 

         unsigned char buf[LOGGER_ENTRY_MAX_LEN + 1] __attribute__((aligned(4)));

         struct logger_entry *entry = (struct logger_entry *) buf;

        int ret;

         ret = read(logfd, entry, LOGGER_ENTRY_MAX_LEN);

        if (ret < 0) {            if (errno == EINTR)                continue;            if (errno == EAGAIN)                break;            perror("logcat read");            exit(EXIT_FAILURE);        }        else if (!ret) {            fprintf(stderr, "read: Unexp ected EOF!\n");            exit(EXIT_FAILURE);        }         /* NOTE: driver guarantees we read exactly one full entry */         entry->msg[entry->len] = '\0';         if (g_printBinary) {            printBinary(entry);        } else {            (void) processBuffer(entry);        }         /*读入内核调试信息*/       

 if((ret = klogctl(9, buffer, sizeof(buffer))) > 0) {            if((ret = klogctl(2, buffer, sizeof(buffer))) > 0) {                entry->tid = 0;                entry->pid = getpid();                /*priority*/                entry->msg[0] = ANDROID_LOG_INFO;                /*tag*/                strcpy(entry->msg+1, KERNEL_TAG);                /*message*/                strncpy(entry->msg+1+sizeof(KERNEL_TAG), buffer, ret);                entry->len = 1 + sizeof(KERNEL_TAG) + ret + 1;                entry->msg[entry->len] = '\0';                if (g_printBinary) {                    printBinary(entry);                } else {                    (void) processBuffer(entry);                }            }        }    }}

这里没有把内核调试信息的级别转换成Androind的LOG级别,全部运用了ANDROID_LOG_INFO级别,进程ID用了当前的进程ID。对我们来说已经够用了,有须要的朋友可以继续完备。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值