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/文件夹下

相关推荐
学困昇4 小时前
C++中的异常
android·java·c++
q***57744 小时前
MySQL 实验1:Windows 环境下 MySQL5.5 安装与配置
windows·mysql·adb
Jerry4 小时前
问题记录 - Android IdleHandler 没有执行
android
没有了遇见5 小时前
Android ButterKnife Android 35情况下 适配 Gradle 8.+
android
方白羽5 小时前
Android多层嵌套RecyclerView滚动
android·java·kotlin
菜就多学6 小时前
SurfaceControlViewHost 实现跨进程UI渲染
android·设计
2501_915106326 小时前
iOS App 测试工具全景分析,构建从开发调试到线上监控的多阶段工具链体系
android·测试工具·ios·小程序·uni-app·iphone·webview
q***82917 小时前
windows同时安装两个不同版本的Mysql
windows·mysql·adb
小羊在奋斗7 小时前
MySQL表的约束:从基础到核心(附场景+案例)
android·数据库·mysql
e***19358 小时前
MySQL-mysql zip安装包配置教程
android·mysql·adb