用ADB的logcat打印内核信息
来源:互联网 发布:英菲克网络机顶盒破解 编辑:程序博客网 时间:2024/04/29 17:58
在默认情况下,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。其实已经够用了,有需要的高手朋友们可以继续完善。
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。其实已经够用了,有需要的高手朋友们可以继续完善。
- 用ADB的logcat打印内核信息
- 让adb logcat打印内核调试信息
- 让adb logcat打印内核调试信息
- adb logcat打印内核调试信息
- android adb logcat打印内核调试信息
- 让adb logcat打印内核调试信息
- Android 让adb logcat打印内核调试信息
- Android 让adb logcat打印内核调试信息
- Android 让adb logcat打印内核调试信息
- adb logcat 打印内核消息
- adb logcat 打印内核消息
- 使用adb logcat 打印 trace信息
- adb logcat 的帮助信息
- 使用 logcat 命令打印内核信息
- adb打印指定tag的logcat
- logcat不打印信息
- Logcat打印调试信息
- c/c++打印带完整附加信息(带时间戳、pid等)的日志,类adb logcat -v threadtime格式
- Audacity丰富的插件支持,果然强大!
- 编译内核
- 网页中插入视频播放代码全集
- 调整编辑框插入符的大小和输入文字的大小
- java多线程之消费者生产者模式
- 用ADB的logcat打印内核信息
- VM 虚拟机中使用 IAR MSP430 USB 串口仿真器无法连接的问题
- Browers Object Model
- SVN实用经验贴(对刚进公司的新人很有帮助哦!)
- ucos-ii在ARM7上移植
- AB Micro800编程环境CCW安装
- MVC 浅谈
- Android实现带图片的List列表
- uCOS-II核心算法分析(μCOS-Ⅱ)