安卓日志~

news2024/10/7 18:26:38

文章目录

  • bugreport
    • 获取报告
      • 设备
      • 模拟器
      • adb命令
      • 用户
    • 报告目录
  • 阅读错误报告
    • logcat
      • 定义
      • 日志记录
      • 抓取日志
        • 过滤优先级
        • 输出格式
        • 格式修饰符
        • 日志缓冲区
    • ANR
      • 触发ANR
      • 避免ANR
        • 工作线程
      • ANR日志
        • 定位无响应应用
        • 查看堆栈跟踪
      • 死锁
    • activity
    • 内存
      • 内存不足
      • 内存快照
    • 广播
    • 显示器争用
    • 后台编译
    • 叙述
    • 电源
    • 程序包
    • 进程
    • 扫描

bugreport

获取报告

Android developers🔗

设备

1、启用开发者选项(连续点击设备版本号
2、点击bug报告(不同系统稍有差异
3、选择所需bug报告类型,点击报告
4、通知栏会有完成提示,点击可分享
5、文件管理中可找到报告文件

模拟器

“Extended controls”窗口中的 File a bug 功能:
1、点击模拟器面板中的 More 图标
2、在 Extended controls 窗口中选择 Bug report
此时系统会打开一个屏幕,您可以在其中查看 bug 报告详细信息,例如屏幕截图、AVD 配置信息和 bug 报告日志。您还可以输入一条包含重现步骤的消息,以便与报告一起保存。
3、等待 bug 报告完成收集,然后点击 Save Report

adb命令

adb bugreport 路径

用户

1、GooglePlay管理中心
2、build.gradle中添加Firebase崩溃报告功能

报告目录

生成的报告文件默认命名为bugreport-BUILD_ID-DATE.zip在这里插入图片描述
bugreport-BUILD_ID-DATE.txt就是 bug 报告,包含系统服务 (dumpsys)、错误日志 (dumpstate) 和系统消息日志 (logcat) 的诊断输出,系统消息包括设备抛出错误时的堆栈轨迹,以及从所有应用中使用 Log 类写入的消息。

阅读错误报告

Android source🔗

logcat

Android developer🔗

定义

logcat是一个命令行工具,用于转储系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从所有应用中使用 Log 类写入的消息。

日志记录

系统进程logd维护的一组结构化环形缓冲区,缓冲区是固定由系统定义的。类型包含如下:日志缓冲区

抓取日志

adb shell logcat,可简写为adb logcat
adb logcat --help查询可用选项
每行记录以timestamp PID TID log-level开头

过滤优先级

以下优先级由低到高:

  • V-Verbose:详细
  • D-Debug:调试
  • I-Info:信息
  • W-Warn:警告
  • E-Error:错误
  • F-Fatal:严重错误
  • S:静默(不输出任何内容)

输出格式

修改日志的输出格式,以显示特定的数据字段

格式修饰符

adb logcat -v --help

  • brief,显示优先级/标记、PID
  • long,显示所有元数据字段,空行分隔消息
  • process,只显示PID
  • raw,显示原生日志信息,没有其他元数据字段
  • tag,只显示优先级/标记
  • thread,显示优先级、PID、TID
  • threadtime,显示日期、调用时间、优先级、标记、PID、TID(默认)
  • time显示日期、调用时间、优先级、标记、PID

日志缓冲区

android日志记录系统为日志消息保留了多个环形缓冲区,并非所有消息都会发送到默认的环形缓冲区

adb logcat -b <buffer>查看任意缓冲区
adb logcat -b <buffer> -b <buffer> -b <buffer>
adb logcat -b <buffer>、<buffer>、<buffer>,查看多个缓冲区

  • radio:包含无线装置、电话相关消息的缓冲区
  • events:已经过解译的二进制系统事件缓冲区消息
  • main:主日志缓冲区(默认),不包含系统和崩溃日志消息
  • system:系统日志缓冲区(默认)
  • crash:崩溃日志缓冲区(默认)
  • all:所有缓冲区
  • defalut:报告main、system、crash缓冲区

ANR

Android developers🔗

触发ANR

Application Not Responding,应用无响应
一定时间内一些事件未得到有效响应或响应时间过长,系统就会出现ANR,系统会终止该进程并将堆栈转储到/data/anr

Android中应用响应性由Activity管理器和窗口管理器系统服务监控。当Android检测到一下某一条件时,便会显示相应ANR:

  • 5秒内输入事件未响应
  • broadcastreceiver在10秒内尚未执行完毕

避免ANR

Android应用通常完全在单线程中运行(默认为界面线程或主线程)。应用在界面线程汇总执行任何需要很长时间的操作都有可能触发ANR,因为应用没有给自己处理输入事件或intent广播的机会。

因此,在可能需要执行冗长操作的情况下,不应在界面线程中执行这些操作,而是应该创建工作线程并在其中执行大部分操作,让界面线程保持运行,阻止系统断定代码卡住。尤其是onCreate()onResume() 等关键生命周期方法。

工作线程

使用场景:

  • 长时间运行操作,如网络或数据库操作
  • 计算成本高昂的操作,如调整位图大小

如果是数据库操作,应通过异步请求完成

ANR日志

定位无响应应用

1、/data/anr下的转储文件
2、bugreport-BUILD_ID-DATE.txt中查找am_anr

06-28 18:23:49.041  1000  1615  9666 I am_anr  : [0,3297,com.android.systemui,818462221,Input dispatching timed out (eddf1c1 NavigationBar0 (server) is not responding. Waited 6293ms for MotionEvent(deviceId=4, source=0x00001002, displayId=0, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (499.3, 492.6)]), policyFlags=0x62000000)]

3、logcat日志中查找ANR in

查看堆栈跟踪

找到ANR对应的堆栈跟踪,确定时间戳和PID,检查进程的主线程,主线程是了解ANR发生时系统正在做的事,不一定是导致ANR的真正原因。

死锁

线程 A 在等待线程 B 占用的某些资源,而线程 B 也在等待线程 A 占用的某些资源。

死锁的往往首先表现为ANR,日志中会有类似信息WATCHDOG KILLING SYSTEM PROCESS。用户所见表现为设备重新启动,这种是运行时重启,并非真正的设备重新启动。(这两概念奇奇怪怪)

  • 运行时重启,系统服务器死机并重启,设备返回到显示启动动画
  • 设备重新启动,内核已崩溃,设备返回google启动徽标

线程粘滞:执行时间超过“粘滞线程最长时间”(默认是600秒)的线程。

activity

应用组件,提供屏幕与用户互动执行操作,activity通过 ActivityManager运行进程
一个界面就是一个activity?

聚焦状态的activity,am_focused_activity
进程启动事件,Start proc
系统颠簸,am_proc_diedam_proc_start

内存

设备物理内存是有显示的,因为管理随机存取存储器很重要

内存不足

内存不足时系统会终止某些进程来释放内存,但又会继续启动其他进程,因此可能导致系统颠簸。

内存不足还可能会减慢任务切换速度,并可能阻止进行返回尝试(返回任务被终止)。如果启动器被终止,那么,用户触摸主屏幕按钮时会重启,并在日志中记录启动器重新加载

am_low_memory表示最后一个缓存的进程已终止

内存快照

内存快照是一种dumpstate,其中会列出正在运行的JAVA进程和本机进程,快照仅提供特定时刻的状态,快照之前的系统状况不一定好/坏

广播

应用生成广播,在当前应用内发送事件或向其他应用发送事件

显示器争用

后台编译

叙述

电源

程序包

进程

扫描

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/750860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux终端前面显示base和不显示base

问题描述&#xff1a;前提是系统里装了anaconda3&#xff0c;有时候两个服务器之间相连长时间没使用或者访问时候前面没显示base。。 解决&#xff1a;我们在做深度学习时需要一个环境&#xff0c;如果前面没显示base的话&#xff0c;你直接conda activate是激活不了我们需要跑…

QT打开和保存文件对话框的操作笔记

QT打开和保存文件对话框的操作&#xff0c;需要先包含头文件QFileDialog&#xff0c;一般通过按钮实现打开和保存文件对话框的操作。 代码如下&#xff1a; #include <QDebug> #include <QFileDialog>void Form::on_pushButton_clicked() {QString fileName;fileN…

基于Javaweb实现ATM机系统开发实战(八)实时查询余额功能实现

老规矩&#xff0c;先看前端页面&#xff0c;把前端页面上没有的表达式都删掉&#xff1a; 创建servlet接受和处理请求&#xff1a; package com.atm.servlet;import com.atm.pojo.User; import com.atm.service.UserService; import com.atm.service.impl.UserServiceImpl;im…

HarmonyOS元服务开发

一、什么是HarmonyOS系统 HarmonyOS是华为开发的一款面向未来的全场景分布式智慧操作系统&#xff0c;将逐步覆盖18N全场景终端设备&#xff0c;用一个软件系统解决大量智能终端体验割裂的问题 1&#xff1a;智能手机 …

Freertos任务的管理是何物?

Freertos任务的管理 提示&#xff1a;文章来自正点原子和野火 文章目录 Freertos任务的管理前言一、任务的四种状态二、 四种状态的关系图三、函数vTaskSuspend();挂起vTaskResume() ;解挂函数 四、代码示例总结 前言 使用Freertos&#xff0c;创建任务&#xff0c;运行任务&a…

【1】Spring手写模拟-ApplicationContext获取对象

ApplicationContext获取对象 阶段目标 当前阶段任务&#xff0c;实现ApplicationContext 加载配置文件&#xff0c;实现对配置的包扫描&#xff0c;获取其字节码文件&#xff0c;查看是否包含注需要Spring管理&#xff0c;以及实现单例或者多例获取Bean对象 实现配置文件con…

实现虚拟机(VM15.5.0)与本机相互通信

目录 1、如果虚拟机一打开请先关机 2、进入“控制面板”-“网络和Internet”-“网络连接”&#xff0c;可以看到有两个虚拟网口&#xff0c;关闭虚拟网口VMnet1和VMnet8&#xff0c;如图所示&#xff1a; 3、选择需要通信的虚拟机&#xff0c;点击“编辑虚拟机设置”&#x…

力扣刷题 - 数组篇

这里写目录标题 数组的遍历485495414628 统计数组中的元素64569744844241数组的改变与移动453665---283 二维数组以及滚动数组118119661419--- 数组的旋转189396 特定顺序遍历二维数组5459498 二维数组的变换5664873--- 前缀和数组303238506 数组的遍历 485 https://leetcode.…

【HCIA】07.OSPF

动态路由的协议分类 按工作区域分&#xff1a; IGP&#xff08;内部网关协议 interior gateway protocols&#xff09;&#xff1a;OSPF、IS-IS、RIPEGP&#xff08;外部网关协议 exterior gateway protocols&#xff09;&#xff1a;BGP 按工作机制及算法分类&#xff1a; 距离…

机器学习(12)--K-Means

目录 一、聚类 二、机器学习中的距离 三、sklearn中的聚类算法 四、KMeans簇内平方和和时间复杂度 五、sklearn中的KMeans 1、建立一个数据集 2、使用K-Means进行聚类操作 3、根据上面的模型绘散点图观察分类效果。 4、评估指标 4.1对于真实标签已知情况 4.2当真实标…

[RocketMQ] Broker 消息重放服务源码解析 (十三)

构建消息文件ConsumeQueue和IndexFile。 ConsumeQueue: 看作是CommitLog的消息偏移量索引文件, 存储了它所属Topic的消息在Commit Log中的偏移量。消费者拉取消息的时候, 可以从Consume Queue中快速的根据偏移量定位消息在Commit Log中的位置。IndexFile索引文件: 看作是Commi…

【bash:xxx:command not found问题,在英伟达nvidia的jetson-orin-nx上遇到的>>>解决方式之一】

【bash:xxx:command not found问题,在英伟达nvidia的jetson-orin-nx上遇到的>>>解决方式之一】 1、概述2、实验环境3、问题描述&#xff1a;bash:xxx:command not found问题4、我的努力第一种方式&#xff1a;加入指令方式第二种方式&#xff1a;使用echo $PATH命令查…

设计模式(七)-----桥接模式(Bridge Pattern)

目录 什么是桥接模式优点缺点应用场景 基本结构业务场景不使用模式的解决方案实现发送普通消息实现发送加急消息实现发送特急消息添加发送手机消息的处理方式 使用桥梁模式来解决问题 什么是桥接模式 将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变…

Es直方图聚合--date_histogram

文章目录 1、背景2、bucket_key如何计算3、前置知识4、日历和固定时间间隔 4.1 Calendar intervals 日历间隔4.2 Fixed intervals 固定间隔 5、数据准备 5.1 准备mapping5.2 准备数据 6、聚合案例 6.1 dsl6.2 java代码6.3 聚合结果 7、完整代码8、参考文档 1、背景 此处来简单学…

云计算UPS监控,怎么办?

在大型数据机房中&#xff0c;UPS系统扮演着关键的角色&#xff0c;为计算机和网络设备提供可靠的电力备份。由于数据机房的规模庞大且关键性强&#xff0c;监控UPS系统的可靠性和效率至关重要。 UPS监控可以提供实时的电池状态、负载信息、电网电压等监测数据&#xff0c;并能…

c++中assert

参考:https://blog.csdn.net/bitcarmanlee/article/details/124283683 1.什么是assert assert&#xff0c;中文翻译为断言&#xff0c;注意是一个宏定义&#xff0c;不是函数。 c中&#xff0c;要使用assert&#xff0c;可以将cassert头文件include进来&#xff0c;而cassert最…

路径规划算法:基于孔雀优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于孔雀优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于孔雀优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法孔雀…

【HCIA】09.STP

STP的选举之发波原理 设备启动之后&#xff0c;经过选举会分别显示出它们的等级&#xff08;最强&#xff0c;次强&#xff0c;最弱&#xff09;选出等级之后&#xff0c;两两设备开始互相发波&#xff0c;等级强的设备会将弱的设备的光顶回去此时两两设备之间的波就是单方向的…

家政服务小程序软件解决方案

家政服务小程序软件是近年来随着人们对家政服务需求的增长而逐渐兴起的一种数字化服务解决方案。通过小程序软件&#xff0c;用户可以轻松预约家政服务&#xff0c;包括保姆、月嫂、钟点工等&#xff0c;而且价格透明、服务规范&#xff0c;大大提高了用户对家政服务的满意度。…

神经网络结构可视化-netron

网址&#xff1a;https://netron.app/ 点选择模型&#xff0c;将oonx文件拉到netron界面&#xff0c;即可 输出; 如何将pytorch模型转换为onnx的格式&#xff1f; 在测试&#xff08;训练好的模型&#xff09;里输入代码 to_onnx(model, 3, 28, 28, output/params.onnx)其…