首页 > 其他分享 >Android about event log

Android about event log

时间:2024-08-20 15:28:44浏览次数:11  
标签:about log dumpsys -- lock adb Android com android

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这个节点 高低电平     输入 板子上可以读取这些节点的值,外部不可以控制

标签:about,log,dumpsys,--,lock,adb,Android,com,android
From: https://www.cnblogs.com/kato-T/p/18369507

相关文章

  • Android 10.0 Launcher3从首页开始安装app功能实现
    1.前言 在10.0的系统rom定制化开发中,在进行Launcher3的某些功能开发实现过程中,在某些项目中,安装的app比较多,要求在launcher3的首页开始安装app应用,接下来就需要分析下app安装图标排序的流程,然后在实现相关的功能2.Launcher3从首页开始安装app功能实现的核心类packages/a......
  • WPF中的视觉树(VisualTree)和逻辑树(LogicalTree)
    可视化树和逻辑树我们先来理解一下什么是可视化树和逻辑树。通俗点来说,可视化树就是在XAML中定义的或者代码添加的元素组成的树。就像下面这样1<Grid>2<ButtonHorizontalAlignment="Center"VerticalAlignment="Center"Content="点击我"Click="Button_Click"><......
  • postgresql 定时收集表和索引统计信息 转发:https://blog.csdn.net/weixin_33711641/a
    --由于pg中表和索引的信息收集都是基于时间点的,对于以往的信息无法与现在的信息进行对比,故写下此工具进行统计信息收集--创建数据信息的schemacreateschemadb_stat;--创建收集信息的基础表createtabledb_stat.snapshot_pg_stat_all_indexes(relidint,indexrelidint,scheman......
  • Android UsbDeviceManager 代码分析
    USBDeviceManager是一个Android系统中用于管理USB设备的类,它是系统服务之一。其主要功能是控制USB设备的连接和断开,以及管理USB设备的权限和状态。下面是对USBDeviceManager代码的简要分析:USBDeviceManager的构造函数:在USBDeviceManager的构造函数中,它会调用系统服务框架的regis......
  • Android libusb
    一、环境:配置NDK环境1、下载libusb源码:https://github.com/libusb/libusb/releases,如下图所示2、删除一些和Android平台无关的文件,删除后的文件如下图所示:思考问题:Android是怎么获取usb设备?如上图所示:连接adbshell,然后cd到/sys/bus/usb/devices/目录,命令ll可以看到里......
  • Android开发 - DisplayMetrics 类控制布局图形的缩放显示解析
    DisplayMetrics是什么DisplayMetrics类在Android中用于获取设备的显示属性(像素等)DisplayMetrics的主要属性metrics.density:屏幕密度,用于决定屏幕上每英寸的像素数DisplayMetricsmetrics=newDisplayMetrics();density=metrics.density;常见值:0.75(低密度)、1.0......
  • 手机使用技巧:如何恢复Android手机不见的短信
     在您的Android手机上丢失短信可能是一种令人沮丧的经历,尤其是在文本包含重要信息的情况下。幸运的是,有一些方法可以在Android上恢复已删除的短信。在这篇博文中,我们将讨论几种在Android手机上恢复已删除短信的方法。为什么需要恢复Android手机不见的短信您可能想要在And......
  • Android开发 - HorizontalScrollView 类水平滚动超长视图使用解析
    基本概念HorizontalScrollView是一个容器,它允许包含的内容在水平方向上滚动。如果你有一块内容(比如一张宽大的图片或一个长长的水平列表),HorizontalScrollView能让用户通过左右滑动来查看超出屏幕的部分基本使用在布局文件(如activity_main.xml)中定义一个HorizontalScrol......
  • R语言的logistic回归分析结果如何快速整合到表格中?
    在使用R语言进行logistic回归时,总是不能一步到位完成结果的整理,目前常见的glm函数需要在一堆结果中逐行比照,如果有更多的变量,结果整理难度也会大大增加!autoreg函数虽然结果展示相对简洁,但仍需要手动处理,比如将OR值和P值拆分到2个表格中,同样也是变量越多,结果整理越困难!......
  • 倾向性得分匹配后,如何快速开展条件logistic回归?
    倾向得分匹配法是通过对样本建模(logit模型)得到倾向性得分,通过倾向性得分为试验组在对照组中找到最接近的样本,从而进行研究的。倾向得分匹配在真实世界临床研究用途越来越广泛,它是一种事后推动组间比较均衡化的方法,控制混杂偏倚。那么匹配完了后,应该用什么方法呢?观察性......