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"以上的。
相关推荐
阿巴斯甜16 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker16 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952717 小时前
Andorid Google 登录接入文档
android
黄林晴19 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android