Android adb自身调试log开关

server/2025/3/30 7:07:15/

本文介绍下如何打开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_propertyGUARDED_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/文件夹下


http://www.ppmy.cn/server/179594.html

相关文章

HTML之内联样式

HTML之内联样式 在HTML中&#xff0c;样式是控制页面外观的重要手段。而内联样式&#xff08;Inline Style&#xff09;是HTML中一种直接为元素设置样式的写法。本文将详细介绍内联样式的基本概念、语法、使用场景以及与其他样式方式的区别。 一、什么是内联样式&#xff1f; …

区块链遇上物联网:如何打造无懈可击的安全网络?

区块链遇上物联网&#xff1a;如何打造无懈可击的安全网络&#xff1f; 在这个万物互联的时代&#xff0c;物联网&#xff08;IoT&#xff09;已经深入到生活的每一个角落。从智能家居到自动驾驶&#xff0c;从健康监测到工业控制&#xff0c;物联网不仅改变了我们的生活方式&…

数据结构——第五章:树与二叉树

目录 一、树&#xff08;⭐⭐&#xff09; 二、二叉树&#xff08;⭐⭐⭐&#xff09; 三、线索二叉树&#xff08;⭐⭐⭐&#xff09; 四、树与森林&#xff08;⭐⭐&#xff09; 五、哈夫曼树与并查集&#xff08;⭐⭐⭐&#xff09; 一、树&#xff08;⭐⭐&#xff09…

debug 笔记:llama 3.2 部署bug 之cutlassF: no kernel found to launch!

1 问题描述 按照官方的写法 import torch from transformers import pipeline import os os.environ["HF_TOKEN"] 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 model_id "meta-llama/Llama-3.2-3B"pipe pipeline("text-generation", modelmode…

26考研——栈、队列和数组_栈(3)

408答疑 文章目录 一、栈1、栈&#xff08;Stack&#xff09;的概念和特点定义术语操作特性示例直观理解栈的基本操作初始化栈判断栈是否为空入栈操作出栈操作读取栈顶元素销毁栈 栈的数学性质 2、栈的顺序存储结构顺序栈的定义栈顶指针初始化注意事项 共享栈共享栈的操作共享栈…

【CXX-Qt】4.1 extern “RustQt“

QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心&#xff0c;用于声明 Rust 类型和签名&#xff0c;使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…

快速入手-Django-rest-framework(一)

1、安装 Django REST Framework pip install djangorestframework 2、快速构建django项目基本结构&#xff0c;参考以下链接创建api模块&#xff0c;并注册应用 快速入手-Django项目创建&#xff08;一&#xff09;-CSDN博客 3、添加到 INSTALLED_APPS INSTALLED_APPS …

PostgreSQL详解

第一章&#xff1a;环境部署与基础操作 1.1 多平台安装详解 Windows环境 图形化安装 下载EnterpriseDB安装包&#xff08;含pgAdmin&#xff09; 关键配置项说明&#xff1a; # postgresql.conf优化项 max_connections 200 shared_buffers 4GB work_mem 32MB 服务管理命…