目录说明
00_mtk_dump -- mtk dump文件
01_qcom_dump -- qcom dump文件
02_data_log -- data/log目录下的内容
*hilog -- 流水日志 一般根据发生事件查看
*eventlog -- 生命周期
*rillogcat -- 移动数据日志
*JankCachedLog -- CPU占用率和内存使用率
*charge-log -- 是否是充电环境
03_log_partition -- log分区下的文件
04_system_log -- Android 系统log,包括anr、tombstone、lowmem、apanic、wtf等
*anr -- 应用无响应日志
*dropbox -- 根据应用包名打印自身相关的日志
05_modem_log -- modem 运行过程中产生的log,从cp-log、diag_logs导出
06_hwzd_logs -- hwzd log
07_RunningTest_log -- RunningT log,包括/data/data/com.huawei.runningtestii/shared_prefs、
/data/log/rt下的内容在data-log里面
08_MMI_log -- MMI测试log,包括/data/data/com.huawei.mmitest/log目录下的内容
09_sdcard_log -- sdcard目录下文件
10_sec_storage_data -- 安全相关的log
11_aee_exp -- mtk可靠性相关的minidump文件
11_dumplog -- qcom可靠性相关的minidump文件
12_mtk_pstore -- mtk pstore日志
13_vendor_log -- data/vendor日志
14_mtk_privatelog -- mtk 私有相关日志
hilog解析
START u0
-------------------------------------------------------------------------------------------
(需要结合具体情况去分析):
1.先看卡顿的是什么应用,根据其包名,类名,进程id等分析
2.根据关键字:changing focus 查看焦点的切换
3.根据关键log: Top activity resumed| Resuming| Skip resume|Resume running| Moving to RESUMED| resumeTopActivityLocked: Resumed| Complete resume 查看生命周期
4.根据关键log: LOGLIMIT|thermal|blockmonitor|dex2oat|Choreographer|ActivityManager: Displayed|lowM 查看当前卡顿情况
5.根据关键log: InputReader|InputDispatcher|InputEvent 查看touch事件
1432 1621 I InputReader: UL_Input first down(551,2179) — 首次按下(inputReader线程,驱动读到第一个点的down事件)
1432 1620 I InputDispatcher: UL_Input touch(551,2179) in new Window{c0b558 u0 com.android.test/ com.android.test.TestActivity}, flag=0x81810120,region=[0,123][1080,2244],frame=[0,123][1080,2244],tSize=2,diff=false — 将事件分发给当前touch窗口(InputDispatcher线程,只在窗口变化后第一次点击打印一次)
6887 6887 I InputEvent: (551,2056)0 — down事件分发给应用的viewrootimpl(应用主线程)
1432 1621 I InputReader: UL_Input last up(551,2179) — 抬起(inputReader线程,驱动读到的最后一个点的up事件)
6887 6887 I InputEvent: (551,2056)1 — up事件分发给应用的viewrootimpl(应用主线程)
START u0
##### 启动flag的对应路径:frameworks/base/core/java/android/content/Intent.java
// 创建新栈
public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;
// 栈顶复用
public static final int FLAG_ACTIVITY_SINGLE_TOP = 0x20000000;
// 不保存Activity的历史状态
public static final int FLAG_ACTIVITY_NO_HISTORY = 0x40000000;
// 清空其activity上面的Activity
public static final int FLAG_ACTIVITY_CLEAR_TOP = 0x04000000;
// 被启动的Activity如果已经在运行,那这个Activity会被调到栈顶
public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 0x00200000;
// 任务重置时将任务中在此标记之后的Activity清空
public static final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 0x00080000;
// 清理栈,一般与FLAG_ACTIVITY_NEW_TASK一起使用
public static final int FLAG_ACTIVITY_CLEAR_TASK = 0X00008000;
// 可以进行多任务显示
public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 0x08000000;
案例:
ActivityTaskManager: START u0 {act=com.huawei.intent.action.PUSH_DELAY_NOTIFY flg=0x10008000 hwFlg=0x110 pkg=com.huawei.android.pushagent cmp=com.huawei.android.pushagent/com.huawei.android.pushselfshow.ui.HandleClickEventActivity (has extras)} from uid 10053
0x10008000是FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK,此时就会清理之前的栈全部信息,重新创建新栈。
桌面日志
Launcher onclick begin|Launcher onLongClick v|TaskView launchTask|onBackPressed zoomEnable|onNewIntent() DragLayer visibility|onOverviewToggle|FPSMonitor startScroll|ExitAppAnimationMananger getAnimationInfo success info|handleKeyguardDone
a. 点击桌面图标 Launcher onclick begin 看桌面是否响应点击事件
b. 长按桌面图标 Launcher onLongClick v
c. 点击任务卡片 TaskView launchTask
d. 点击返回键 onBackPressed zoomEnable
---- HwLauncher: Launcher onBackPressed
---- HwLauncher: Launcher onBackPressed end //已经在桌面,无法后退
e. 点击home键 onNewIntent() DragLayer visibility
f. 点击recents键 onOverviewToggle ----
g. 滑动屏幕 FPSMonitor startScroll
h. 滑进负一屏 Workspace :isScrollToHiBoard
i. 从应用退出回桌面
ExitAppAnimationMananger getAnimationInfo success info
j. 解锁进入桌面
handleKeyguardDone
k. 下拉状态栏
PanelBar: INTENT_STATUSBAR_VISIBLE_CHANGE sended, EXTRA_VISIBLE = true
l.看应用调整栈到top是否晚于luancher,luancher的stackId=0;
positionChild stackId
q.桌面上云服务,云文件夹报错
HwLauncher:HiFolder hifolder service connect failed,error code 1010
event-log解析
生命周期
am_proc_start|am_proc_bound|am_proc_died|am_kill|wm_create_task|wm_create_activity|wm_new_intent
-----------------------------------------------------------------------------------------------------------------------
wm_task_created|wm_create_activity|wm_on_create_called|wm_on_start_called|wm_on_resume_called|wm_stop_activity|wm_on_stop_called|wm_on_destroy_called|
可根据关键字: _called|_activity 过滤
wm_stack_created: 26 ——首次启动创建TaskStack,id是26
wm_task_created: [58,26] ——创建Task
am(wm)_focused_stack: [0,0,26,0,reuseOrNewTask] ——焦点栈从0栈切换到26栈
am(wm)_create_task: [0,58] ——创建TaskRecord
am(wm)_create_activity: ——此日志仅作为标记要开始执行activity生命周期的调度分发,实际创建ActivityRecord对象是在创建stack之前就完成了构造对象
am(wm)_pause_activity: ——发起pause上一个activity–ActivityManager_activity: Moving to PAUSING
am(wm)_restart_activity: ——activity首次启动有次日志,非首次启动无此日志,取而代之的是am_resume_activity
am(wm)_set_resumed_activity: ——焦点切换给要启动的activity,Activity切换时会切换窗口焦点(触发resume下一个应用,AMS触发) —— Changing focus
am(wm)_add_to_stopping:——activityPaused通知系统侧,并将已经pause的activity加到stopping列表
am(wm)_on_create_called ——activity执行完onCreate
am(wm)_on_start_called: ——activity执行完onStart
am(wm)_on_resume_called ——activity执行完onResume (am_set_resumed_activity–am_on_resume_called之间过程耗时在应用)
am(wm)_stop_activity ——发起stop上一个pause的页面
am(wm)_on_stop_called ——activity执行完onStop
特殊点打印
I screen_toggled: 0 灭屏
I screen_toggled: 2 解锁
I screen_toggled: 1 亮屏
I am_on_resume_called : 声明周期
I am_low_memory : 系统内存不足
I am_destory_activity : 销毁 Activity
I am_anr : ANR 以及原因
I am_kill : 被杀以及原因
开机log分析
adb logcat -b event | grep boot_progress
发起finish的原因
在events的日志中查看finish的原因:
1.recent-task-trimmed-----多任务裁剪,超过多任务应用的上限,就会触发(当前桌面多任务限制:20),配置不显示在多任务 excludeFromRecents=true
2.app-request------应用自己发起的finish请求,属于应用自己的业务逻辑
3.remove-task------是在多任务界面上划移除操作,属于用户行为
4.remove-task-all-----是在多任务界面上点击小刷子操作,属于用户行为
5.remove-hidden-task-----先添加到hidden列表里面,只有回到桌面才会去触发这个(可以去添加FLAG_ACTIVITY_MULTIPLE_TASK,进行多任务显示,会在多任务中有多个卡片)
6.clear-task-all-----这个是添加了FLAG_ACTIVITY_CLEAR_TASK的flag,去清理之前的任务栈
7.clear-task-stack-----这个是添加了FLAG_ACTIVITY_CLEAR_TOP的flag,去清理栈顶的activity
8.force-stop-----这种force-stop的是调用接口forceStopPackage,强制停止的
1、 进程启动
日志含义:应用进程已经被启动
日志参数:
am_proc_start:User,PID,UID,Process Name,Type,Component
User:多用户的ID,应用双开或多用户的ID
PID:被启动的进程ID
UID:被应用进程的UID
Process Name:被启动的进程名称
Type:启动进程的原因的组件类型:activity/service/broadcast/content provider
Component:起的进程的组件的名称,例如具体Activity的名称
参数特征:进程启动的参数中,缺少包名相关的内存,可以通过参数6的Component的/前面的部分判断是否属于统一PackageName
日志举例:
am_proc_start:
[0,11478,10170,com.huawei.photos,pre-top-activity,{com.huawei.photos/com.huawei.gallery.app.GalleryMain}]
am_proc_start: [0,27726,10123,com.huawei.trustcircle,service,{com.huawei.trustcircle/com.huawei.trustcircle.AuthLifeCycleService}]
am_proc_start:[0,14486,10181,com.huawei.scenepack,content provider,{com.huawei.scenepack/com.huawei.scenepack.provider.AppletSettingsProvider}]
am_proc_start: [0,32017,1001,com.huawei.regservice,broadcast,{com.huawei.regservice/com.huawei.regservice.BluetoothChangeReceiver}]
2、 进程绑定
日志含义:应用进程被绑定开始工作
am_proc_bound:User,PID,Process Name
User:多用户的ID,应用双开或多用户的ID
PID:被启动的进程ID
Process Name:被启动的进程名称
参数特征:通过PID可以关联到进程启动日志
日志举例:
am_proc_bound: [0,27726,com.huawei.trustcircle]
3、 进程死亡
日志含义:应用进程死亡
am_proc_died:User,PID,Process Name,OomAdj,ProcState
User:多用户的ID,应用双开或多用户的ID
PID:被启动的进程ID
Process Name:被启动的进程名称
OomAdj:死亡进程的OomAdj值
ProcState:死亡进程的ProcState值
参数特征:通过PID可以关联到唯一的进程启动日志
日志举例:
am_proc_died: [0,12661,com.huawei.calendar,995,19]
am_proc_died: [0,12900,com.android.settings,995,19]
am_proc_died: [0,12401,com.android.providers.calendar,985,19]
4、 杀死进程
日志含义:杀死应用进程
am_kill:User,PID,Process Name,OomAdj,Reason
User:多用户的ID,应用双开或多用户的ID
PID:被启动的进程ID
Process Name:被杀的进程名称
OomAdj:杀死进程的OomAdj值
Reason:杀死进程的原因
参数特征:通过PID可以关联到唯一的进程启动日志
日志举例:
am_kill : [0,12661,com.huawei.calendar,995,empty for 1855s]
am_kill :
[0,17194,com.huawei.devicegroupmanage,915,stop com.huawei.devicegroupmanage due to from pid 17194by app]
am_kill : [0,31638,com.huawei.camera,965,empty for 1838s]
应用被杀的原因可以参考这个wiki:
http://3ms.huawei.com/km/blogs/details/6350003
5、 生命周期日志关联关系
5.1日志含义:系统侧 创建任务task。
wm_create_task :User,Task ID
User:用户id
Task ID:创建的任务task ID
日志举例:
wm_create_task: [0,16123]
5.2日志含义:系统侧 创建activity与START u对应。
wm_create_activity:User,Token,Task ID,Component Name,Action,MIME Type,URI,Flags
User:用户id
Token:当前应用的Token对象
Task ID:任务task ID
Component Name:被启动应用的组件名称
Action:创建时Activity携带的Action参数名
MIME Type:通常为null,不用关注
URL:通常为null,不用关注
Flags:应用启动的flag,16进制转换为10进制的数,276824064对应的就是0x10800000
日志举例:
wm_create_activity: [0,154025448,16123,com.huawei.watch.home/.modules.watchface.picker.EditThemeCardActivity,NULL,NULL,NULL,276824064]
5.3日志含义:与create_activity一样,也是启动应用,只是应用是以singleTop模式启动的activity。
wm_new_intent:User,Token,Task ID,Component Name,Action,MIME Type,URI,Flags
User:用户id
Token:当前应用的Token对象
Task ID:任务task ID
Component Name:被启动应用的组件名称
Action:创建时Activity携带的Action参数名
MIME Type:通常为null,不用关注
URL:通常为null,不用关注
Flags:应用启动的flag,16进制转换为10进制的数,276824320对应的就是0x10800100
日志举例:
wm_new_intent: [0,113826244,16107,com.huawei.watch.home/.activity.HomeMainActivity,android.intent.action.MAI
图层日志解析
关键字分析
\d Layers|powerMode| - Output Layer|Timestamp:
powerMode=On (2), activeConfig=0, Composition Display State: ["THUNDERSOFT-PC"]
Line 51594: 1 Layers
Line 51595: - Output Layer 0xb400007182ef4500(#0)
Line 51608: powerMode=On (2), activeConfig=1, Composition Display State: [""]
Line 51636: 3 Layers
Line 51637: - Output Layer 0xb400007172b04a00(StatusBar#0)
Line 51650: - Output Layer 0xb400007172b07400(NotificationShade#0)
Line 51663: - Output Layer 0xb400007172ad4c00(ColorFade#0)
Line 52584: Timestamp: 11:33:22.111
Line 53172: powerMode=On (2), activeConfig=0, Composition Display State: ["THUNDERSOFT-PC"]
Line 53187: 1 Layers
Line 53188: - Output Layer 0xb400007182ef4500(#0)
Line 53201: powerMode=On (2), activeConfig=1, Composition Display State: [""]
Line 53229: 3 Layers
Line 53230: - Output Layer 0xb400007172b04a00(StatusBar#0)
Line 53243: - Output Layer 0xb400007172b07400(NotificationShade#0)
Line 53256: - Output Layer 0xb400007172ad4c00(ColorFade#0)
Line 54177: Timestamp: 11:33:22.123
Line 54765: powerMode=On (2), activeConfig=0, Composition Display State: ["THUNDERSOFT-PC"]
Line 54780: 1 Layers
Line 54781: - Output Layer 0xb400007182ef4500(#0)
charge-log解析
充电日志分析(charge_log):关键字含义
电源常见日志分析:
1、 ss_VOL:当前电池电压
2、 ss_CUR:当前电池电流,为负表示电池在放电,为正表示电池在充电
3、 ss_ufSOC(cap):未经平滑的电量。
4、 ss_SOC:在ss_ufsoc基础上根据电池电压和电池内阻进行校准后的电量,再进过平滑处理。
5、 SOC:UI显示电量百分比,根据前10组ss_SOC电量求平均值。
6、 ss_RM:电池剩余电量
7、 ss_FCC: 电池满充电量
8、 ss_UUC: 电池不可用电量
9、 ss_CC: 电量计累计电量
10、 ss_OCV:电池开路电压
11、 fcc:充满电后,更新电池的满电量,以后都用该值计算电量百分比
12、 Ibus:充电器输出电流,mA
13、 Vbus:充电器输出电压,mV
14、 online:充电器是否在位
15、 type:充电器类型
注意:比较关注的是type,soc, cap, Ibus, Vbus
kmsgcat-log解析
内核日志分析(kmsgcat-log)—常用关键字搜索
1. vbus_rise :等于0代表充电器拔出中断,等于1代表插入中断;
2. chg_type:如下枚举类型,不同的只对应的含义:
3. direct_charge:可显示直充的具体检测信息;
4. USB_STATE:可查看USB的连接状态;
5. USB_ICL:设置线上电流;
6. thermal send input current:热限流 场景限流;
3. 常用的操作:
1. 读电池电流adb shell cat /sys/class/power_supply/battery/current_now
2. 读电池电压adb shell cat /sys/class/power_supply/battery/voltage_now
4. 收到拔出/插入中断的处理流程:(自己理解,如有误差,请指正)
硬件发出中断信息à底层驱动接收到中断,然后发送中断事件给FWK层àFWK层的USB部分收到中断,更新USB状态,再发送广播àFWK层的charge部分更新充电状态,在进行广播àsystemUI层收到事件,进行状态显示的更新。
硬件----
充电底层驱动---
FWK层的USB部分----
FWK层的charge部分----
systemUI层---
问题分析过程:
1. 先了解问题发生时间点;
2. 查看对应时间点的charge_log中的显示信息是否正确;
3. 如果charge_log中的显示信息有问题,打开对应时间点的内核日志,搜索上面列举的关键字,查找具体的出错点。
日志的抓取方法
获取手机里日志
-
【删除log adb shell rm -rf data/log/hilogs adb shell rm -rf data/log/dropbox adb shell rm -rf data/log/LogService 【pull log adb pull data/log/hilogs/ . adb pull data/log/dropbox . adb pull data/log/LogService .
商用手机log获取
方法1
1.进入手机后台工程菜单 打开AP *#*#2846579#*#*
2.进入手机开发者模式
3.进入设置开发者选项,打开USB调式和HCL log。 收集蓝牙HCI日志,如果不需要蓝牙日志,跳过该步骤。
4.复现问题
5.adb pull data/log/
方法2
1.获取问题收集sn号。
2.通过大数据网站搜索sn号; 只能中有dorbox
logcat获取
-
logcat获取
-
adb logcat > xxx.log adb logcat -b [main/system/event/radio...] > xxx.log 默认adb logcat获取的是main log;
-
通过在mainlog或者bugreport中搜索关键字am_anr,ANR in可以得到ANR发生的时间、对应的进程、原因描述等、 CPU占用和iowait时间,有时也需要确定内存情况,可以通过在bugreport中查找mem info信息获取到;
-
-
bugreport获取
-
bugreport获取
-
adb bugreport 该命令执行完成,会出现一个进度条,耐心等待到100%即可; 有时候会由于adb版本较低,上述命令不能正常执行,可以执行如下命令,也可以得到所需文件; adb bugreport > bugreport.txt bugreport包含main、system、event、kernel**log**信息,还有设备的一些dump信息,内容较多、较完全;
-
通过在mainlog或者bugreport中搜索关键字am_anr,ANR in可以得到ANR发生的时间、对应的进程、原因描述等、 CPU占用和iowait时间,有时也需要确定内存情况,可以通过在bugreport中查找mem info信息获取到;
-
ANR获取
-
ANR获取
-
Android系统有自身的设计,在应用运行时出现无响应时,会将该信息记录保存到data/anr/目录下,即为所需的trace文件, 所以获取该文件的方式也就特别简单,执行如下命令即可; adb pull /data/anr/ 上述命令执行完成,在当前目录会有anr文件夹,里面就是所以的文件;
-
-
通过第一步已经查找到所在进程,接着在trace文件中找到对应进程的堆栈信息,方便更进一步定位问题; "main" prio=5 tid=1 Runnable | group="main" sCount=0 dsCount=0 obj=0x73bcc7d0 self=0x7f20814c00 | sysTid=20176 nice=-10 cgrp=**default** sched=0/0 handle=0x7f251349b0 | state=R schedstat=( 0 0 0 ) utm=12 stm=3 core=5 HZ=100 | stack=0x7fdb75e000-0x7fdb760000 stackSize=8MB | held mutexes= "mutator lock"(shared held) *// java* *堆栈调用信息**,**可以查看调用的关系,定位到具体位置* at ttt.push.InterceptorProxy.addMiuiApplication(InterceptorProxy.java:77) at ttt.push.InterceptorProxy.create(InterceptorProxy.java:59) at android.app.Activity.onCreate(Activity.java:1041) at miui.app.Activity.onCreate(SourceFile:47) at com.xxxx.moblie.ui.b.onCreate(SourceFile:172) at com.xxxx.moblie.ui.MainActivity.onCreate(SourceFile:68) at android.app.Activity.performCreate(Activity.java:7050) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2807) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2929) at android.app.ActivityThread.-wrap11(ActivityThread.java:-1) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1618) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:171) at android.app.ActivityThread.main(ActivityThread.java:6699) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:246) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
kernel log获取
-
kernel log获取
-
有时为了有助于定位问题,需要获取内核log信息,可以通过如下方式获取; adb shell dmesg > dmesg.log // 需要 root 权限 adb shell cat /proc/kmsg > /tmp/kernel.log // 需要 root 权限
-
图层日志获取
adb shell dumpsys SurfaceFlinger
## 打开hilogs中layerlog打印权限
adb shell dumpsys SurfaceFlinger --sfLogFlag 0x1
adb shell dumpsys SurfaceFlinger --sfLogFlag 0x2
adb shell dumpsys SurfaceFlinger --sfLogFlag 0x3
## dump手机应用图层(手机必须在root的情况下dump图层)
adb shell dumpsys SurfaceFlinger --file --no-limit --full-dump
// 复现之前执行一次(start)---》 开始复现--》复现之后再次执行一次(end)--》最后pull 出来
adb shell dumpsys SurfaceFlinger --file --no-limit --full-dump
adb pull /data/misc/wmtrace/dumpsys.txt
TCP dump
【TCP dump抓取步骤】必须用root的手机才能抓上
1.连接好手机。
2.点开Common.bat脚本,弹出命令窗口,输入6,点击回车。不要关闭窗口
3.然后开始复现问题。复现结束后,按ctrl+C,结束当前窗口
4.然后输入N. 就好了,会在当前路径生成一个.pcap文件
@echo off
set ROOTDIR=%cd%
:START
:::echo "Please checkout the adb port of your Phone... ..."
:::adb wait-for-device
cd %ROOTDIR%
echo * *
echo * Ver:0722 *
echo * *
echo **************START**************
echo 1, "Get hilogs"
echo 2, "Del hilogs"
echo 3, "Get Screenshot"
echo 4, "Get Vendor Country & Dev model"
echo 5, "Check tombstones"
echo 6, "Capture tcpdump"
echo 7, "Capture Modem log"
echo 8, "disable startup guide"
echo 9, "Reboot device"
echo 10, "Disable VoLTE"
echo 11, "Enable VoLTE"
:::echo 12, "MODIFY_UPGRADE_SCRIPT"
echo 0, "Exit"
set /p val="Please input:"
echo %val%
if %val%==1 ( goto GET_LOG )
if %val%==2 ( goto DEL_LOG )
if %val%==3 ( goto GET_SCREENSHOT )
if %val%==4 ( goto GET_VC_DM )
if %val%==5 ( goto GET_TOMBSTONES )
if %val%==6 ( goto CAPTURE_TCPDUMP )
if %val%==7 ( goto CAPTURE_MODEM_LOG )
if %val%==8 ( goto DISABLE_GUIDE )
if %val%==9 ( goto REBOOT_DEVICE )
if %val%==10 ( goto DISABLE_VOLTE )
if %val%==11 ( goto ENABLE_VOLTE )
if %val%==12 ( goto MODIFY_UPGRADE_SCRIPT )
if %val%==0 ( goto END ) else ( goto START )
:GET_LOG
echo ----------GET LOG----------
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set hh=%time:~0,2%
set tm=%time:~3,2%
set ss=%time:~6,2%
if exist log ( cd log )
SET LOGDIR=%mm%%dd%-%hh%%tm%%ss%
SET LOGDIR=%LOGDIR: =0%
ECHO "%LOGDIR%"
mkdir "%LOGDIR%"
cd "%LOGDIR%"
adb wait-for-device
adb pull /data/log/hilogs ./
adb pull /data/anr
adb pull data/system/dropbox
adb pull data/tombstones
adb pull /data/log/LogService
goto success
:DEL_LOG
echo ----------DEL_LOG----------
adb wait-for-device
adb shell "rm -rf /data/log/hilogs/*"
adb shell "rm -rf /data/log/hilogs/*"
adb shell "rm -rf /data/anr/*"
adb shell "rm -rf data/system/dropbox/*"
adb shell "rm -rf data/tombstones/*"
adb shell "rm -rf /data/log/LogService/*"
goto success
:GET_SCREENSHOT
echo ----------GET_SCREENSHOT----------
cd log
adb wait-for-device
adb pull /sdcard/Pictures/Screenshots
if not %ERRORLEVEL%==0 goto error
goto success
:GET_VC_DM
echo ----------GET_VC_DM----------
adb wait-for-device
adb shell "sed 's/ /\n/g' /proc/cmdline |grep vendorcountry"
adb shell "sed 's/ /\n/g' /proc/cmdline |grep devmodel"
if not %ERRORLEVEL%==0 goto error
goto success
:GET_TOMBSTONES
echo ----------GET_TOMBSTONES----------
adb shell "ls -l /data/tombstones"
if not %ERRORLEVEL%==0 goto error
goto success
:CAPTURE_TCPDUMP
echo ----------CAPTURE_TCPDUMP----------
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set hh=%time:~0,2%
set tm=%time:~3,2%
set ss=%time:~6,2%
cd log
SET LOGDIR=%mm%%dd%-%hh%%tm%%ss%
SET LOGDIR=%LOGDIR: =0%
mkdir "%LOGDIR%"
cd "%LOGDIR%"
SET TCPLOGNAME=%LOGDIR%.pcap
echo Log Path: /sdcard/%TCPLOGNAME%
echo Please press N!
echo Please press N!
echo Please press N!
start /w /max cmd /c adb shell /hw_product/bin/tcpdump -s 0 -i any -w /sdcard/%TCPLOGNAME%
adb pull /sdcard/%TCPLOGNAME%
if not %ERRORLEVEL%==0 goto error
adb shell rm /sdcard/%TCPLOGNAME%
goto success
:CAPTURE_MODEM_LOG
echo ----------CAPTURE_MODEM_LOG----------
adb root adb shell rm -rf /data/vendor/log/modem
adb shell am broadcast -a com.huawei.lcagent.MODEM_SWITCH_OFF
adb shell am broadcast -a com.huawei.lcagent.MODEM_SWITCH_ON
echo Capturing Modem log ...
echo Press any key to stop Modem log
pause
adb shell am broadcast -a com.huawei.lcagent.MODEM_SWITCH_OFF
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set hh=%time:~0,2%
set tm=%time:~3,2%
set ss=%time:~6,2%
cd log
SET LOGDIR=%mm%%dd%-%hh%%tm%%ss%
SET LOGDIR=%LOGDIR: =0%
mkdir "%LOGDIR%"
cd "%LOGDIR%"
adb pull /data/vendor/log/modem
if not %ERRORLEVEL%==0 goto error
goto success
:DISABLE_GUIDE
adb shell pm disable com.huawei.hwstartupguide
if not %ERRORLEVEL%==0 goto error
goto success
:REBOOT_DEVICE
adb reboot
if not %ERRORLEVEL%==0 goto error
goto success
:ENABLE_VOLTE
::: show VOLTE icon -> carrier_volte_show_switch_bool = true
::: diable VoLTE -> carrier_volte_available_bool = false
adb shell "sed -i 's#\"carrier_volte_available_bool\" value=\"false\"#\"carrier_volte_available_bool\" value=\"true\"#g' /data/user_de/0/com.android.phone/files/*"
if not %ERRORLEVEL%==0 goto error
goto success
:DISABLE_VOLTE
adb shell "sed -i 's#\"carrier_volte_available_bool\" value=\"true\"#\"carrier_volte_available_bool\" value=\"false\"#g' /data/user_de/0/com.android.phone/files/*"
if not %ERRORLEVEL%==0 goto error
goto success
:MODIFY_UPGRADE_SCRIPT
set /p scriptPath=请输入升级脚本
"C:\Program Files\Git\usr\bin\sed.exe" -i "s#fastboot reboot#cd ../BINs\r\ncall get_root.bat#g" %scriptPath%
if not %ERRORLEVEL%==0 goto error
goto success
:END
exit
:error
@echo Update FAIL!
@echo ===========================================
@echo @@@@@@@ @@ @@@@ @@@@
@echo @@ @@ @@@@ @@ @@
@echo @@ @ @@ @@ @@ @@
@echo @@ @@ @@ @@ @@
@echo @@ @ @@ @@ @@ @@
@echo @@@@@ @@ @@ @@ @@
@echo @@ @ @@@@@@ @@ @@ @
@echo @@ @@ @@ @@ @@ @@
@echo @@ @@ @@ @@ @@ @@
@echo @@@@ @@ @@ @@@@ @@@@@@@
@echo ===========================================
goto START
:success
@echo ===========================================
@echo @@@ @@@ @@
@echo @@ @@ @@ @@
@echo @@ @@ @@ @@
@echo @@ @@ @@ @@
@echo @@ @@ @@@@
@echo @@ @@ @@ @@
@echo @@ @@ @@ @@
@echo @@ @@ @@ @@
@echo @@@ @@@ @@
@echo ===========================================
goto START
trace获取
1、手机上准备好要抓取的页面
2、运行命令进行抓取 python systrace.py
-o : 指示输出文件的路径和名字 、-t : 抓取时间 、
-b : 指定 buffer 大小 、-a : 指定 app 包名
3、手机上开始操作
4、设置好时间,完成后生成.html 文件,此文件使用chorm打开(chrome://tracing/)(https://ui.perfetto.dev/#!/)
## 抓取命令
python systrace.py -b 30000 gfx input view wm am sm video camera hal app res dalvik rs bionic binder_driver power sched freq idle -o 7503.html
使用抓取命令中可能遇到的问题:
1.缺少python-six库
【报错场景】:
Traceback (most recent call last):
File "systrace.py", line 48, in <module>
from systrace import run_systrace
File "/home/user/share/trace/systrace/catapult/systrace/systrace/run_systrace.py", line 43, in <module>
from systrace import systrace_runner
File "/home/user/share/trace/systrace/catapult/systrace/systrace/systrace_runner.py", line 11, in <module>
from systrace import output_generator
File "/home/user/share/trace/systrace/catapult/systrace/systrace/output_generator.py", line 15, in <module>
from tracing.trace_data import trace_data
File "/home/user/share/trace/systrace/catapult/tracing/tracing/trace_data/trace_data.py", line 17, in <module>
import six
ImportError: No module named six
【解决方法】:安装 python-six 库
sudo apt install python-six
高通日志
Dear customer,
1. Please upload your about.html and phone num.
2. Please reproduce the issue for below logs:
adb logcat > logcat.log
adb shell cat /proc/kmsg > kmsg.log
adb shell cat /d/tzdbg/qsee_log > qsee.log
adb shell cat /d/tzdbg/log > tzbsp.log
If device has no node "/d/tzdbg/", please try below command:
adb shell cat /proc/tzdbg/qsee_log > qsee.log
adb shell cat /proc/tzdbg/log > tzbsp.log
PS: Please zip the logs before you upload it.
Ta日志
使用adb shell cat /d/tzdbg/qsee_log > 存放路径 抓取ta log
步骤:输入adb shell cat /d/tzdbg/qsee_log > 存放路径------>复现问题------>问题复现后停止