在默认情况下,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)
contin
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)
contin

通过修改adb的logcat.cpp源码,能够使logcat不仅输出应用日志,还能捕获到内核调试信息。在logcat的readLogLines函数中,增加了调用klogctl获取内核日志的逻辑,并将这些信息转化为Android的日志格式,尽管没有精确映射到Android的LOG级别,而是统一使用ANDROID_LOG_INFO级别,但足以满足基本需求。有兴趣的开发者可以进一步优化此功能。
最低0.47元/天 解锁文章
1750

被折叠的 条评论
为什么被折叠?



