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.logtags

wm_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/kmsg

adb 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.Settings

adb shell dumpsys package com.android.launcher3

adb shell dumpsys window com.android.launcher3

./prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-xxxx_r.ninja  framework-minus-apex

frameworks/                                                    framework-minus-apex
frameworks/base/services 下有修改代码,则要编译services.jar

adb shell settings get global auto_time_zone

//获取所有关于产品的系统属性
adb shell getprop | grep product 
adb shell cat /system/build.prop | grep product

adb reboot loader  切换烧录 模式
git log --oneline  查看很多git 提交日志
gitk  git图形化界面的插件
git show  xxx  --name-only
git cherry-pick  commitid  合并commit

adb shell input keyevent 4  back   3 home 

adb shell "dumpsys activity top | grep '#[0-9]: ' | tail -n 1"  获取Settings当前界面的Fragment

Android.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"以上的。
相关推荐
数据猎手小k2 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
你的小103 小时前
JavaWeb项目-----博客系统
android
风和先行3 小时前
adb 命令查看设备存储占用情况
android·adb
AaVictory.4 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
似霰5 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
大风起兮云飞扬丶5 小时前
Android——网络请求
android
干一行,爱一行5 小时前
android camera data -> surface 显示
android
断墨先生5 小时前
uniapp—android原生插件开发(3Android真机调试)
android·uni-app
无极程序员7 小时前
PHP常量
android·ide·android studio
萌面小侠Plus8 小时前
Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
android·性能优化·kotlin·工具类·低端机