Android adb自身调试log开关

本文介绍下如何打开adb源码中的debug log

1.adb源码log是可以动态打开和关闭的,控制逻辑代码如下

复制代码
static NoDestructor<std::mutex> log_mutex;
static NoDestructor<CachedProperty> log_property GUARDED_BY(log_mutex)("debug.adbd.logging");
static std::optional<LogStatus> cached_log_status GUARDED_BY(log_mutex);

static NoDestructor<CachedProperty> persist_log_property
        GUARDED_BY(log_mutex)("persist.debug.adbd.logging");
static std::optional<LogStatus> cached_persist_log_status GUARDED_BY(log_mutex);

static LogStatus ParseLogStatus(std::string_view str) {
    LogStatus result = {};
    for (const auto& part : android::base::Split(std::string(str), ",")) {
        if (part == "cnxn") {
            result[adb::LogType::Connection] = true;
        } else if (part == "service") {
            result[adb::LogType::Service] = true;
        } else if (part == "shell") {
            result[adb::LogType::Shell] = true;
        } else if (part == "all") {
            result[adb::LogType::Connection] = true;
            result[adb::LogType::Service] = true;
            result[adb::LogType::Shell] = true;
        }
    }
    return result;
}

static LogStatus GetLogStatus(android::base::CachedProperty* property,
                              std::optional<LogStatus>* cached_status) REQUIRES(log_mutex) {
    bool changed;
    const char* value = property->Get(&changed);
    if (changed || !*cached_status) {
        **cached_status = ParseLogStatus(value);
    }
    return **cached_status;
}

namespace adb {
bool is_logging_enabled(LogType type) {
    std::lock_guard<std::mutex> lock(*log_mutex);
    return GetLogStatus(log_property.get(), &cached_log_status)[type] ||
           GetLogStatus(persist_log_property.get(), &cached_persist_log_status)[type];
}
}  // namespace adb

2.配置方法

adb shell setprop persist.debug.adbd.logging service //打开LogType为service的log

例如:

复制代码
daemon/services.cpp:262:    ADB_LOG(Service) << "transport " << transport->serial_name() << " opening service " << name;

打开后执行adb remount,可以抓到如下log

复制代码
I adbd    : transport UsbFfs opening service shell,v2,TERM=xterm-256color,raw:remount

adb shell setprop persist.debug.adbd.logging all //打开所有logtype

3.打开adb trace log方法

复制代码
adb shell setprop persist.adb.trace_mask 1
adb shell pkill adbd   //需要重启adbd 生效

trace log会保存在/data/adb/文件夹下

相关推荐
保护我方三四3 分钟前
ART | GC Configuration
android
weixin_391336901 小时前
gdb 调试mysql
android·mysql·adb
ufo00l2 小时前
Android buildToolsVersion 会影响什么
android
技术蔡蔡2 小时前
Android项目如何添加Flutter Module
android·flutter
dora2 小时前
Android数据缓存框架 - 内存缓存与数据的发布订阅
android·开源·github
_一条咸鱼_2 小时前
Android Compose 框架的列表与集合模块之懒加载列表深入剖析(四十五)
android
十六ᵛᵃᵉ4 小时前
day3_Flink基础
android·java·flink
C_V_Better5 小时前
!!!谷歌停止开源安卓
android·开源
前行的小黑炭7 小时前
Kotlin的委托是什么?在看源码的时候不知道他的作用是什么,为什么使用,那么你看看这篇文章。
android·kotlin
前行的小黑炭7 小时前
Kotlin的扩展函数:给任何类添加你想要的功能,即使是自带类,第三方类。
android·kotlin