让adb logcat打印内核调试信息


让adb logcat打印内核调试信息
Wednesday, October 14th, 2009 | Author: admin | ? Edit ?


转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>

在默认情况下,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: Unexpected 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。对我们来说已经够用了,有需要的朋友可以继续完善。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值