如何有效的抓取logcat,提高debug效率

版权声明:转载请注明出处。谢谢 https://blog.csdn.net/xct841990555/article/details/81660451

logcat

目录


CRT工具在抓log的一些使用
  • 新建按钮
  • 设置自动保存
  • MTK logcat出现的条件
1.如何抓取有效的log
  • logcat -c的重要性以及时间戳和标志位的重要性
  • 设置时间戳
  • ANR时拿到trace文件
2.android 系统中一些常用的命令
  • linux 命令(cp,mv,cd,chmod,rm,cat)
  • adb(挂载命令)
  • adb 命令与串口命令的关系
  • adb shell kill PIDNumber 死你想杀死的后台进程来模拟某种 bug 的复现条件。
  • adb shell ps 查看当前终端中的进程信息
  • 安装 应用
  • list user(受限模式)
  • 分离数据板子上对应的位置
  • key对应板子上的位置
  • 如何进入recovery 模式
  • 如何在工厂菜单里面进行本地OTA升级
  • dumpsys命令
3.一些提高效率的命令
  • 挂载remount
  • am(打开应用)
  • input text
  • 当前界面
  • 截图
  • 模拟按键 inputevent(附件键值,getevent)
4.MTK cli封装的一些命令
  • hbbtv下抓log
  • 无声问题抓取log
  • 升级以及读取6m60的版本号的命令
  • 串口替换panel.bin等的方法
  • 命令调节pcm和dolby
  • 给TV设置一个系统中本身就带的panel
  • 初始化功放命令

一.CRT工具在抓log的一些使用

1.新建按钮
如下图将command window 和Button Bar勾选,即下方会出现按钮行以及命令输入行

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.一些基本的设置
  • 设置颜色字体等
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 设置屏幕中最大的滚动行
    在这里插入图片描述
  • 设置log自动保存命名以及自动添加时间戳

在这里插入图片描述

3.MTK log出现的条件

有时候发现在串口输入 logcat,出现logcat打印太少,或者没有logcat的现象,这个时候执行以下命令。(此种机制是因为mtk的log要先检测在data目录下时候有tkui.print这个文件,如果有,log命令才会生效并且打印)

su
touch /data/tkui.print
sync;sync;sync
reboot

二.如何抓取有效的log

logcat -c以及logcat使用的时机。
  • 我们在复现问题以及抓log的时候,大多都是开始先输入一个logcat,然后再复现问题,问题复现到了之后,再去保存logcat。此时如果经过很长时间才复现到问题现象。则会发现logcat文件已经很大了。这种抓log有以下几点缺点:

    • logcat多达几M,占服务器内存
    • 开发人员只有倒着看。
    • 复现到立即暂停logcat,可能有好多logcat还没有刷出来,导致分析不到问题点
    • 必现问题还好说,开发人员可以自己抓log,但是对于随机问题,复现一次不容易,故此时logcat很重要。
  • 推荐比较好的有效的抓取logcat的几种方式

1.复现问题之前输入"logcat -c" 先将之前即将要刷出现无用的logcat清除。然后重新保存一份新的logcat。再输入logcat开始复现。依次类推,直到复现到问题。(每次抓log切记,让logcat多跑一会,大概一分钟。再关闭logcat,上传系统

2.为了方便测试人员,不用去重复的保存logcat。可以采用这种方式:复现之前打开logcat保存文件,然后输入"logcat -c"清除之前无用的logcat。然后输入logcat,让logcat刷起来,接着开始复现。等到复现到问题之后快速在命令行敲出几个标志的字符,可以多敲几次(可以随便起,例如test等到问题现象完毕,然后让logcat多刷一会。即可以将logcat上传到系统,然后上传后请在问题上说明刚刚敲击的关键词是什么。这样做的作用是:让开发人员很好的定位问题出现对应的logcat的位置。从而更高效的解决问题。

3.logcat中请按照上面的方法,加上时间戳。这样也可以让开发人员更好的定位问题的所在

4.出现ANR时

  • 什么是ANR

ANR,是“Application Not Responding”的缩写,即“应用程序无响应”。

  • 什么情况下才会产生ANR

    • 主线程对输入事件在5秒内没有处理完毕
    • 主线程在执行BroadcastReceiver的onReceive函数时10秒内没有执行完毕
    • 主线程在执行Service的各个生命周期函数时20秒内没有执行完毕
  • 当ANR出现后需要抓取的log


1.串口logcat
2.traces.txt文件(cp /data/anr/traces.txt /storge/U盘名/)

三.android 系统中一些常用的命令

1.linux 命令(cp,mv,cd,chmod,rm,cat,find,mkdir)
  • cp 复制命令
  cp  路径A下的某个文件C  路径B(将文件c拷贝到B路径下)
  eg:
  cp  -rf 路径A  路径B(将A路径下的所有文件拷贝到B路径下)
  eg:
2. adb(挂载命令)
3. adb 命令与串口命令的关系

串口命令加上"adb shell",即为adb命令

adb shell kill PIDNumber 死你想杀死的后台进程来模拟某种 bug 的复现条件。
adb shell ps 查看当前终端中的进程信息
安装 应用
adb install -r LiveTV.apk
adb uninstall LiveTV.apk
pm install -r LiveTV.apk
Android 多用户模式(Android TV受限模式)
pm list users(列出所有用户)
pm remove-user 10(在主用户模式下删除10这个用户)
am switch-user 10(切换到10这个用户)

分离数据对应的位置
key对应的位置
如何进入recovery 模式
  串口输入  reboot recovery(进入后也可以OTA升级)
如何在工厂菜单里面进行本地OTA升级
setenforce 0(关掉selinux)
将OTA包拷到U盘下,将U盘插入TV
进入工厂菜单点击OTA菜单按钮

三.一些提高效率的命令

  • 挂载remount
mount -o rw,remount /system(挂载system分区)
mount -o rw,remount /perm(挂载perm分区)
  • 快速打开一个app
am start -n 应用包名/应用Activity名
am start -n com.coocaa.factory/.SkyFactory(打开工厂菜单)
am start -n com.android.tv.settings/.MainSettings(打开主页settings)
am start -n com.google.android.tvlauncher/com.google.android.tvlauncher.MainActivity(打开home主页)
am start -n  com.google.android.youtube.tv/com.google.android.apps.youtube.tv.cobalt.activity.MainActivity(打开youtube)
  • input text(快速输入账号密码)
input text rd120170907(如何rd1的密码)
  • 查看当前界面属于那一个应用
dumpsys window|grep mFocusedWindow

这个命令可以从显示出来的包名以及类名,查看是属于那一个app。从而可以确认是我们的应用还是谷歌或者第三方的应用

  • 截图命令
screencap -p /storge/u盘名

目前好像只能截主页的图

  • 模拟按键 inputevent(附件键值,getevent)
input keyevent 178 (模拟按下键值为178的键,附件为各键对应的键值)

四.MTK cli封装的一些命令

  • hbbtv下抓log
    对于hbbtv里面的bug,直接logcat录的log是看不出什么的。必须在复现前输入以下命令:
su
echo 7 > /proc/sys/kernel/printk
touch /data/tkui.print
sync
ttyman
按“tap”进入mw cli
mw.oh.el 1
重启系统后输入
su
echo 7 > /proc/sys/kernel/printk
logcat -c
开始复制问题,复制到问题后在
输入logcat。
  • 无声问题抓取logcat

一般无声音直接在串口logcat也是无用的。所以如果随机出现无声还是请及时联系开发

  • 升级以及读取6m60的版本号的命令
su
setenforce 0
echo 7 > /proc/sys/kernel/printk
ttyman
b.scm 0
pmx.vb1.6m60.slupg 后面接文件路径(升级6m60)
pmx.vb1.6m60.slver(读取6m60版本号)
  • 串口替换panel.bin等的方法
连接串口,当打印出来后回车并输入su,再回车;
输入cat /proc/partinfo,找到panel对应的分区号,一般panel为31。
U盘拷贝入要替换的panel.bin,将U盘插到TV上, 使用如下命令替换: 输入 setenforce 0 然后回车 输入 dd if=/storage/0000-0000/panel.bin of=/dev/mmcblk0p31  然后reboot重启
注意:0000-0000为U盘名称,要替换成你自己的,31也好替换成你需要的
  • 命令调节pcm和dolby
su
echo 7 > /proc/sys/kernel/printk
cli
b.scm 0
aud.io.spdif.iecs 2 1
  • 给TV设置一个系统中本身就带的panel
su
echo 7 > /proc/sys/kernel/printk
cli
b.scm 0
pmx.l(展示所有可选择的panel)
pmx.s.p 211(一般根据屏选择对应的编好)
  • 初始化功放命令
su
echo 7 > /proc/sys/kernel/printk
cli
b.scm 0
aud.io.adac.ai

猜你喜欢

转载自blog.csdn.net/xct841990555/article/details/81660451