当前位置: 首页 > news >正文

Android about event log

EventLogTags.logtags,它是个日志工具,很多模块有该文件.
event log 在framework层常常使用,通过类似EventLog.writeEvent()写log,这种log被保存在/system/etc/event-log-tags.

./frameworks/base/services/core/java/com/android/server/wm/EventLogTags.logtagswm_set_resumed_activity (User|1|5),(Component Name|3),(Reason|3)

EventLogTags.logtags简单使用

如何查看 event log
查看Event所有的tags
adb shell cat /system/etc/event-log-tags输出events日志信息
adb logcat -b events

event log 分析

实战 event log
//1.0
am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3)实例:
I am_proc_start: [0,765,10069,com.android.systemui,service,{com.android.systemui/com.android.systemui.wallpapers.ImageWallpaper}]解析:
启动一个进程:UserId=0,PID=765,UID=10069,ProcessName=com.android.systemui,Type=service,Component=com.android.systemui/com.android.systemui.wallpapers.ImageWallpaper//下面都是android系统耗时关键字
//2.0
am_anr (User|1|5),(pid|1|5),(Package Name|3),(Flags|1|5),(reason|3)实例:
I am_anr  : [0,2699,com.example.text_app,552124230,Input dispatching timed out (9ac3957 com.example.text_app/com.example.text_app.MainActivity (server) is not responding. 
Waited 5000ms for MotionEvent(deviceId=4, eventTime=3126039070000, source=TOUCHSCREEN, 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: (237.5, 114.8)]), policyFlags=0x62000000)] 解析:
UserId=0,PID=2699,包名=com.example.text_app,flags=...,anr原因:Input dispatching timed out is not responding(Waited 5000ms)//3.0
binder_sample (descriptor|3),(method_num|1|5),(time|1|3),(blocking_package|3),(sample_percent|1|6)
作用:监控每个进程的主线程的binder transaction的耗时情况, 当超过阈值(比如:500ms)时,则输出相应的目标调用信息.
(block -> 阻塞)
2754 2754 I binder_sample  [android.app.IActivityManager,35,2900,anroid.process.media,5]解析:
主线程2754,调用android.app.IActivityManager的接口,对应的方法transaction code为35,
耗费时间2900ms,该block所在包名为anroid.process.media//4.0
dvm_lock_sample: [process_name,thread_id,lock_holder,lock_holder_tid,
lock_holder_method,lock_holder_method_line,lock_waiter,
lock_waiter_tid,lock_waiter_method,lock_waiter_method_line,wait_time]其中,process_name是发生锁竞争的进程名,thread_id是发生锁竞争的线程ID,
lock_holder是持有锁的对象名,lock_holder_tid是持有锁的线程ID,
lock_holder_method是持有锁的方法名,
lock_holder_method_line是持有锁的方法所在的行号,
lock_waiter是等待锁的对象名,
lock_waiter_tid是等待锁的线程ID,
lock_waiter_method是等待锁的方法名,
lock_waiter_method_line是等待锁的方法所在的行号,
wait_time是等待锁的时间(毫秒)I dvm_lock_sample: [system_server,1,Binder:699_13,16162,AlarmManagerService.java,
2185,void com.android.server.AlarmManagerService$4.remove(android.app.PendingIntent, android.app.IAlarmListener),
-,4170,void com.android.server.AlarmManagerService$AlarmThread.run(),100]解析:
在system_server进程中,线程1(Binder:699_13)在执行AlarmManagerService.java的2185行,
即remove方法时,试图获取一个锁,但是发现这个锁已经被线程16162持有,
而线程16162正在执行AlarmManagerService.java的4170行,即run方法.因此,线程1进入等待状态,等待了100毫秒.dvm_lock_sample:当某个线程等待lock的时间blocked超过阈值(比如:500ms),则输出当前的持锁状态.

Android ANR基本Log分析
Android ANR问题(一)-基本分析方法

event log 流程分析
Android R app 冷启动:
wm_task_created-->wm_stack_created-->wm_create_task-->wm_create_activity
-->am_proc_start-->am_proc_bound-->wm_restart_activity-->wm_set_resumed_activity
-->wm_on_create_called-->wm_on_start_called-->wm_on_resume_calle

Event log的各 TAG流程分析

开发小tips
adb connect 192.168.1.xxx#mm(mma、mmm、mmma) -B -j2  2>&1    开始编译模块
注:-B表示编译模块的所有文件,-j2表示编译的时候开启两个线程,2>&1表示将错误切换到输出(输入为0,输出为1,错误为2)。  find ./ -name "*.xml" |xargs grep "status_bar_height"  高效搜索git show xxx --name-only  查看某个提交修改了那些文件linux内核调试信息dmesg和kmsg命令
adb shell dmesg
adb shell 然后执行 cat /proc/kmsgadb shell 
dumpsys window | grep  mCurrentFocus
service list | grep lyl 
settings list system (查看系统settings-system属性)
cat /proc/meminfo
df   查看系统分区
ifconfig   wlan0:WIFI   eth0:有线
ifconfig eth0 up 连接以太网
ifconfig eth0 down 断开
cd  system/bin/   bootanimation    看开机动画是否能播放adb shell am start com.android.settings/com.android.settings.Settingsadb shell dumpsys package com.android.launcher3adb shell dumpsys window com.android.launcher3./prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-xxxx_r.ninja  framework-minus-apexframeworks/                                                    framework-minus-apex
frameworks/base/services 下有修改代码,则要编译services.jaradb shell settings get global auto_time_zone//获取所有关于产品的系统属性
adb shell getprop | grep product 
adb shell cat /system/build.prop | grep productadb reboot loader  切换烧录 模式
git log --oneline  查看很多git 提交日志
gitk  git图形化界面的插件
git show  xxx  --name-only
git cherry-pick  commitid  合并commitadb shell input keyevent 4  back   3 home adb shell "dumpsys activity top | grep '#[0-9]: ' | tail -n 1"  获取Settings当前界面的FragmentAndroid.mk编译apk不生成ota包或者odex包
LOCAL_DEX_PREOPT:=false首先查看当前webview的版本,使用如下命令查询
adb shell am start -a android.intent.action.VIEW -d https://liulanmi.com/labs/core.html作用:输出dumpsys帮助信息。 
dumpsys  -help
查看Dumpsys包含服务列表
作用:输出dumpsys所有可打印服务信息,开发者可以关注需要调试服务的名称。dumpsys  -l
输出指定服务的信息 
作用:输出指定的服务的 dump 信息。 格式:dumpsys [servicename] 
示例:输出服务 SurfaceFlinger的信息,可执行命令:
dumpsys SurfaceFlinger 
输出指定服务和应有进程的信息 
作用:输出指定服务指定应用进程信息。 格式:dumpsys [servicename] [应用名] 
示例:输出服务名为 meminfo,进程名为 com.android.systemui 的内存信息,执行命令:
dumpsys meminfo com.android.systemu//查看所有activity的信心,Stack编号dumpsys activity activities  //查看所有Window 
dumpsys window windows  cat proc/mounts  查看设备存储分区信息
df -h  查看设备存储使用率dumpsysmeminfo 输出内容包含哪些?最佳的答案,包含所有实名 binder 中实现的
dump 接口中打印的数据,具体可以搜索源
码,如何使用dumpsys信息,一些变量打印service list | grep power      先查是否有这个service
dumpsys power | grep Last  在dump 查看service里面的一些变量打印winscope,perfetto 分析工具Gpio口的输入输出,  输出是外部设备可以控制gpio这个节点 高低电平     输入 板子上可以读取这些节点的值,外部不可以控制adb shell
logcat ActivityManager:I MyApp:D *:S示例说明:支持所有的日志信息,除了那些标签为“ActivityManager”和优先级为“Info”以上的、标签为
“MyApp”和优先级为“Debug”以上的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《通义千问AI落地—中》:前端实现
  • C语言程序设计(初识C语言后部分)
  • Compose(7)交互和动画
  • 第二节:Nodify 添加节点到编辑器中
  • 【GH】【EXCEL】P3: Set Conditional Formatting To Excel Data By Gh
  • Vue.js学习笔记(七)使用sortablejs或el-table-draggable拖拽ElementUI的el-table表格组件
  • “太猴看了”车衣引发热议:深蓝要和“黑悟空”跨界互动?
  • 【解压即玩】最终幻想7 重制版中文+预购特典+全DLC,难忘的一作
  • Facebook的区块链战略:如何在社交媒体中实现去中心化
  • Tomcat类加载机制详解
  • java多线程(七)AQS(AbstractQueuedSynchronizer)技术解析:以赛跑起跑场景为例
  • 【Python机器学习】NLP的部分实际应用
  • 企业数字化转型管控平台探索 ---基于流程的企业经络管理框架DEM
  • QEMU模拟ARM嵌入式LINUX系统
  • Python | Leetcode Python题解之第371题两整数之和
  • 时间复杂度分析经典问题——最大子序列和
  • @jsonView过滤属性
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Angularjs之国际化
  • express.js的介绍及使用
  • Javascript基础之Array数组API
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Kibana配置logstash,报表一体化
  • Laravel 实践之路: 数据库迁移与数据填充
  • oldjun 检测网站的经验
  • REST架构的思考
  • SAP云平台里Global Account和Sub Account的关系
  • Service Worker
  • Spark学习笔记之相关记录
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SpriteKit 技巧之添加背景图片
  • swift基础之_对象 实例方法 对象方法。
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Vue学习第二天
  • 初识 beanstalkd
  • 工程优化暨babel升级小记
  • 理清楚Vue的结构
  • 三栏布局总结
  • 项目实战-Api的解决方案
  • 一些css基础学习笔记
  • 在Mac OS X上安装 Ruby运行环境
  • 阿里云API、SDK和CLI应用实践方案
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Redis 入门到精通(一)数据类型(4)
  • (2015)JS ES6 必知的十个 特性
  • (day18) leetcode 204.计数质数
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (LeetCode C++)盛最多水的容器
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (六)激光线扫描-三维重建
  • (四)图像的%2线性拉伸
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET 8.0 中有哪些新的变化?