adb logcat

来源:互联网 发布:java 正则 编辑:程序博客网 时间:2024/04/28 04:23
adb shell logcat -v threadtime | egrep "AudioYusuHardware|AudioYusuPolicyManager|AudioYusuPolicy|AudioFlinger|AudioSystem|AudioYusuVolumeController|AudioService|AudioManager|AudioYusuStreamHandler|AudioYusuStreamOut|AudioYusuStreamIn|AudioYusuLad|AudioYusuLadPlayer|AudioYusuCcci|AudioYusuDef|MediaPlayerService|MediaPlayer"

adb logcat -v threadtime -s "ReclistActivity,SoundRecorder,reclistactivity,RecordDelete,MediaRecorderWrapper,RecSetActivity,fulin,RecordConfigFile,AppFeature,RecConfigFile"

adb logcat -v threadtime | egrep "AudioSource|StagefrightRecorder|AudioRecord|AudioFlinger|AudioYusuStreamIn|AudioYusuHardware"
adb logcat -v threadtime | egrep "D.SR/"
adb logcat -v threadtime | egrep "D.SR/|E.SR/"
pid = adb shell ps | grep $com.android.bbksoundrecorder | awk '{print $2}'
adb logcat -v threadtime | grep pid
#!/bin/bash
com.android.bbksoundrecorder=$1
pid=adb shell ps | grep $com.android.bbksoundrecorder | awk '{print $2}'
echo pid
adb logcat -v threadtime | grep $pid
adb logcat -v threadtime | egrep "Video-BootReceiver|Video-CacheService|Video-DiskCache|MediaController|MovieView|MovieViewPublic1|VideoPlayer1|VideoView"

adb logcat -v threadtime | egrep "SR/" | tee logcat2.txt
adb logcat -v threadtime | tee logcat2.txt | egrep "SR/"
adb logcat -v threadtime | egrep "AudioStreamInALSA|AudioHardwareALSA|AudioPolicyManagerALSA|AudioPolicyService"

adb shell cat /proc/version

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Android logcat 和log系统简介:

Android系统中log是分等级的,有如下等级:

    * V — Verbose (lowest priority)详细信息,最低优先级,对应代码为Log.v()

    * D — Debug 调试信息,对应代码为Log.d()

    * I — Info 信息,对应代码为Log.i()

    * W — Warning 警告信息,对应代码为Log.w()

    * E — Error 错误信息,对应代码为Log.e()

    * F — Fatal 致命错误信息,对应代码为Log.f()

    * S — Silent (highest priority, on which nothing is ever printed) 最高优先级,什么也不打印,实际没有对应到代码中,此等级什么也不会打印。

在代码中应严格区分log的优先级,比如只是调试用的log就只能用Log.d(),如果执行某个打开设备的命令返回错误,应该用Log.e(),分配内存返回错误应该用Log.f()。

分等级的好处是,在遇到bug时,通过过滤log等级为e级,将只会打印出e级和f级的错误log,而不会打印w/i/d/v级别的信息,从而容易获取关键的错误信息,而不至于被其他调试信息所淹没。

Log Tag标签

Tag标签的作用是提供logcat打印log信息的范围过滤,比如可以一个文件一个tag,或者逻辑功能相同的多个文件,可以用同一个tag标签,在小范围的调试中,通过过滤tag,可以减少打印出来的log信息。在代码中一般是Log.d/v/i/w/e/f系列命令的第一个参数。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

svn 上传代码要求:

上传svn服务器前,先执行svn status命令,在输出列表中,观察是否有'?'标志的文件或文件夹,即是否有未版本化的文件,如有则应该仔细观察这里面是否有自己新建的文件,如有执行svn add 命令将此文件纳入版本控制系统。

在执行svn commit操作时,注意自己所处的目录,不要在不是自己负责的目录下执行不带路径参数的svn commit命令,防止误将本地自己的非正常改动上传到服务器中。

提交前用svn diff检查修改的详细信息,以确保修改的内容是正确的。

提交时,必须填写注释,注释内容清晰描述本次提交内容,变动信息。

每次提交后,必须确认工程可正常运行,即SVN里保存的是可以正确运行的代码,否则恢复至稳定版本。

编译过程动态产生的东西不要提交到服务器。

每次提交前先更新,这样能在提交前发现是否和别人的冲突

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在出现问题时,请查看下modem的状态,抓下寄存器的信息,抓下录音的PCM数据,和mtklog信息:
(1)查看modem的状态异常,请输入以下命令确认modem状态:
出问题时,请抓取modem状态信息(命令: adb shell cat /sys/class/BOOT/BOOT/boot/md > modem_err.txt)把modem_err.txt附在对应bug附件中
(2)抓取寄存器的状态的信息:
出问题时,请抓取audio寄存器信息(命令: adb shell cat /proc/audio > register_err.txt)并把register_err.txt附在对应bug附件中
然后将正常通话时的寄存器也导出一份(命令: adb shell cat /proc/audio > register_ok.txt)并把register_ok.txt附在对应bug附件中
(3)在出现问题时,请抓取下录音的PCM数据:抓取步骤如下:
1.进入工程模式->Hardware Testing->Audio->Audio Logger->勾选Audio Stream Input Dump (其余项不要勾选)
2.进行Sound Record录音,复现问题,记录复现问题的时间点和出现问题时对应的PCM数据。(每次录音都会生成对应的PCM数据)
3.再取消勾选Audio Stream Input Dump
4.将mtklog文件夹中的audio_dump附在对应bug的附件中
(4)进入工程模式->Log and Debugging->MTKLogger->开启ModemLog MobileLog NetworkLog
注意:记录下出现问题的时间.跟踪前请先清空下log,并每隔2小时,如果没有出现问题,清空下log。并把mtklog添加到对应bug的附件中。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

开启mtklog
1 Audio->Audio Logger
2 SystemLog->System Logger
抓取mtklog注意四点
(1)请开机就打开mtklog,确保开机就可以抓取mtklog.
(1)在抓取Log之前,请先清空所有的log。如果1-2两个小时没有抓到有效log,请清空所有Log,重新抓取,如此循环操作。
(2)把手机的时间调整当前正确的时间
(3)并记录复现问题的时间点,分钟就可以
(4)并把PCM数据抓到

adb pull system/app/SoundRecorder.apk c:/

adb push out/target/product/bbb77_cu_ics2/system/app/SoundRecorder.apk system/app/

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SW Version: vim mediatek/config/common/ProjectConfig.mk

Modem Version: vim mediatek/custom/common/modem/project_name/modem.info

ELF文件和database在 vim ./mediatek/custom/common/modem/bbk15_td_ics_tdd128hspa_PD1215/

项目配置信息:./mediatek/config/bbk77_cu_jb

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

mt6577平台Android4.1
img-->myfold 比如 // cd Z:\mtk\mtk-android-4.1\ALPS.JB.MP.V1_W_20120919\out-PDXXXX\target\product\bbb77_cu_jb 目录
先进入到你PDXXXX的工程目录
然后 cd out/target/product/bbb77_cu_jb/ 进入到 bbb77_cu_jb 目录  
然后输入命令:
 cp -rvfL {boot.img,recovery.img,system.img,userdata.img,preloader_bbk77_cu_jb.bin,DSP_BL,uboot_bbk77_cu_jb.bin,secro.img,logo.bin,MT6577_Android_scatter_emmc.txt} /opt3/shiyanhua/share3/bbk77_cu_jb/bbk77_cu_jb_1218_6246_1/
(这一项为你自己想要复制到的路径,可以自己新建一个文件夹,将所有的镜像都拷贝到这个文件夹,然后将这个文件夹放到烧写的机器上烧写,这样更方便)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Android Supported Media Formats

http://developer.android.com/guide/appendix/media-formats.html

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

adb shell logcat -v threadtime

adb shell ps -p

adb shell ps -t

adb shell ps -p -t

adb shell ps -p -t  | egrep "277|309"

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1. 使用VIM查看LOG:
    a. 保留匹配行(删除没有包含某个关键字的行)
        :g!/Audio/d 

        :v/abc/d -> 这个会把凡是不是行里没有abc的都删掉 (delete all line without “abc”)
    b. 删除匹配行
        :g/Audio/d
    c. 删除到文件头
        :M             定位到文件中某一行
        shift + v   选中当前行
        gg            选中到文件行首
        d               删除到文件头
    d. 删除到文件尾
        :M              定位到文件中某一行
        shift + v    选中当前行
        G               选中到文件行首
        d                删除到文件尾
    e. 撤消删除
        u

    注意: 以上命令注意区分大小写

2. 打印LOG时养成习惯打印出time pid tid等信息

    adb shell logcat -v threadtime
3. 根据LOG判断thread之间的调用关系
    第二步操作会打印出进程及线种ID,配合以下命令就可以查看调用者信息
    adb shell ps -p -t | grep <pid|tid>

    d^ 删除到行首.   
    d$ 删除到行尾.   
    :#,&d 删除 # 到 & 行. 例如: 3,5d

    查找替换   
    /# 查找 #. 例如: /printf   
    ?# 反向查找 #.   
    n 查找下一个.  

    N 反向查找下一个.

4. vim v+j,显示向下部分

           v+k,显示向上部分

           a,or,i 编辑

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

gg; shift v; shift g; =; format code
:wq 保存
:set number 显示行号
cc 进入编辑 或 i
u  撤消上一步操作
dw 删除单词

dd 删除行

0:移动光标到当前行首

^:移动光标到当前行的第一个字母位置

$:移动光标到行尾

):移动光标到下一个句子

( :移动光标到上一个句子

缩进
  >> 增大缩进.
  << 减少缩进.
  == 自动缩进.

cmd

* ! <command> 执行命令.
* :r <file> 插入文件内容.
* :r !<command> 插入命令输出结果.
* :cd <path> 修改默认工作目录.

文件打开保存

* :e <file> 打开文件.
* :enew 新文件.
* :w 保存.
* :wa 全部保存.
* :w <file> 另存为.
* :wq 保存并退出.
* :q 退出.
* :qa 全部退出.
* :q! 强制退出.
* ZZ 退出vim并保存文档

全局 (global)

这个不知道怎么翻译,反正vim是叫做global,可以对搜索到的东西执行一些vim的命令。我也是2-3个星期前因为读log中一些特殊的东 西,才学会用的。 (find the match pater and execute a command)

global具体自行方法是 g/pattern/command
:g/abc/p -> 查找并显示出只有abc的行 (only print line with “abc” )
:g/abc/d -> 删除所有有abc的行 (delete all line with “abc”)
:v/abc/d -> 这个会把凡是不是行里没有abc的都删掉 (delete all line without “abc”)

开启,保存与退出 (save & exit)

:w -> 保存文件 (write file)
:w! -> 强制保存 (force write)
:q -> 退出文件 (exit file without save)
:q! -> 强制退出 (force quite without save)
:e filename -> 打开一个文件名为filename的文件 (open file to edit)
:e! filename -> 强制打开一个文件,所有未保存的东西会丢失 (force open, drop dirty buffer)
:saveas filename -> 另存为 filename (save file as filename)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

调整光标到要编辑的行,进行编辑
:w 保存当前编辑的行 相当CTRL+S
:wq 保存并退出文件,不再编辑

:255 跳到第255行

gg 跳到文件第一行;

shift + G 跳到文件最后一行;

删除两个行号直接的Log

1  跳到文件某行(:行号M);2 shift + v 选中当前行;3 按j向下选中到要删除的行号N,按k键向上选中到要删除的行号N;4按下d键删除行号为M和N直接的log

删除到文件头部

1 gg 跳到文件第一行;2  shift + v   选中当前行;3  按j向下选中到要删除的行号N,按k键向上选中到要删除的行号N;4   按d键删除到文件头

删除到文件尾部

1 shift +g  跳到文件最后一行;2  shift + v   选中当前行;3  按j向下选中到要删除的行号N,按k键向上选中到要删除的行号N;4   按d键删除到文件尾

快速查找错误log的步骤:

第一:用vim打开log,输入:g!/ E /d 过滤掉无关log,只是显示错误Log信息

第二:执行gg命令,回到文件首行

第三:在过滤之后错误的Log中,查找具体的某两个时间段期间,发生错误的log信息,如输入:v/17:35\|17:36\|17:37\|17:38\|17:39/d,或者输入:v/17:\(35\|36\|37\|38\|39\)/d,查找17:35到17:39分钟期间错误log

第四:保存某个时间段期间错误的log,如输入:saveas G:/filename.txt,就将错误Log信息保存到了G盘根目录下,名字为filename.txt的文本文件中了

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

文件内容查找 find+grep 

grep "Audio" $(find . -name "*.cpp")

find . -name "*.cpp" | grep "Audio"

find . -name "*.svn" | xargs rm -rf

find . -name "*.cpp" | xargs grep "Audio"

find . -name "*.cpp" | -exec more {} \;

find . -name "*.cpp" -exec grep "Audio" {} \;

find . -name "*.cpp" | xargs grep "audio.dumpenc.aac"

find . -name "*.cpp" | xargs grep "aacenc_out.pcm"

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

linux中Find命令的使用

今天一个很偶然的机会看到了linux中的find命令,然后我在网上搜索了一下这方面的内容,为了方便大家学习参考,我就总结一下,一上午的劳动成果,呵呵!

首先是find的语法:

find [起始目录] 寻找条件 操作

还有种表述方式:find PATH OPTION [-exec COMMAND { } \;]

因为find命令会根据我们给的option,也就是寻找条件从我们给出的目录开始对其中文件及其下子目录中的文件进行递归搜索,所以我觉的这个地方说是“起始目录”是非常好的。

该命令中的寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。逻辑运 算符 and、or、not 的含义为:

(1) and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条 件都满足时,寻找条件才算满足。例如:

find –name ’tmp’ –xtype c -user ’inin’

% 该命令寻找三个给定条件都满足的所有文件

(2) or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足 时,寻找条件就算满足。例如:

find –name ’tmp’ –o –name ’mina*’

% 该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。

(3) not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件 。例如:

find ! –name ’tmp’

% 该命令查询文件名不是’tmp’的所有文件。

需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“\”来去除括号的意义。例:

find \(–name ’tmp’ –xtype c -user ’inin’ \)

我觉的现在我应该说下出了查询条件,在find中的option的内容了:

在option中,具体有参数:

-name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]。

-lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符 *、?、[ ]。

-gid n 查找属于ID号为 n 的用户组的所有文件。

-uid n 查找属于ID号为 n 的用户的所有文件。

-group ’字串’ 查找属于用户组名为所给字串的所有的文件。

-user ’字串’ 查找属于用户名为所给字串的所有的文件。

-empty 查找大小为 0的目录或文件。

-path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。

-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。

-size n[bckw] 查找指定文件大小的文件,n 后面的字符表示单位,缺省为 b,代表512字节的块。

-type x 查找类型为 x 的文件,x 为下列字符之一:

b 块设备文件

c 字符设备文件

d 目录文件

p 命名管道(FIFO)

f 普通文件

l 符号链接文件(symbolic links)

s socket文件

-xtype x 与 -type 基本相同,但只查找符号链接文件。

以时间为条件查找

-amin n 查找n分钟以前被访问过的所有文件。

-atime n 查找n天以前被访问过的所有文件。

-cmin n 查找n分钟以前文件状态被修改过的所有文件。

-ctime n 查找n天以前文件状态被修改过的所有文件。

-mmin n 查找n分钟以前文件内容被修改过的所有文件。

-mtime n 查找n天以前文件内容被修改过的所有文件。

-print:将搜索结果输出到标准输出。

例子:在root以及子目录查找不包括目录/root/bin的,greek用户的,文件类型为普通文件的,3天之前的名为test-find.c的文件,并将结构输出,find命令如下:

find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -print

当然在这其中,-print是一个默认选项,我们不必刻意去配置它。

我们再看一下exec选项:

-exec:对搜索的结构指令指定的shell命令。注意格式要正确:"-exec 命令 {} \;"

在}和\之间一定要有空格才行;

{}表示命令的参数即为所找到的文件;命令的末尾必须以“ \;”结束。

例子:对上述例子搜索出来的文件进行删除操作,命令如下:

find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -exec rm {} \;

find命令指令实例:

find . - name ‘main*’ - exec more {} \;

% 查找当前目录中所有以main开头的文件,并显示这些文件的内容。

find . \(- name a.out - o - name ‘*.o’\)> - atime +7 - exec rm {} \;

% 删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。

% 命令中的“.”表示当前目录,此时 find 将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。

% “\(” 和 “\)” 表示括号(),其中的 “\” 称为转义符。之所以这样写是由于对 Shell 而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。

% “-name a.out” 是指要查找名为a.out的文件;

% “-name ‘*.o’” 是指要查找所有名字以 .o 结尾的文件。

这两个 -name 之间的 -o 表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件。

% find命令在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间 是否在7天以前(条件 -atime +7),若是,则对该文件执行命令 rm(-exec rm {} \;)。

其中 {} 代表当前查到的符合条件的文件名,\;则是语法所要求的。

% 上述命令中第一行的最后一个 \ 是续行符。当命令太长而在一行写不下时,可输入一个 \,之后系统将显示一个 >,指示用户继续输入命令。-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

gg; shift v; shift g; =; format code
:wq 保存
:set number 显示行号
cc 进入编辑 或 i
u  撤消上一步操作
dw 删除单词
dd 删除行
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
调整光标到要编辑的行,进行编辑
:w 保存当前编辑的行 相当CTRL+S
:wq 保存并退出文件,不再编辑
:255 跳到第255行
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
编辑   
u 撤销.   
. 重做.   
dd 删除当前行.   
#dd 删除几行. 例如: 3dd   
d^ 删除到行首.   
d$ 删除到行尾.   
:#,&d 删除 # 到 & 行. 例如: 3,5d   
yy 拷贝当前行到剪贴板.   
#yy 拷贝 # 行到剪贴板.   
y^ 从文件头开始拷贝.   
y$ 拷贝到文件尾部.   
:#,&y 拷贝 # 到 & 行. 例如: 4,5y   
p 在光标后粘贴.   
P 粘贴到光标前.   
>> 增大缩进.   
<< 减少缩进.   
== 自动缩进.   
查找替换   
/# 查找 #. 例如: /printf   
?# 反向查找 #.   
n 查找下一个.   
N 反向查找下一个.   
:s/old/new/g 当前行无提示替换.   
:%s/old/new/g 无提示替换.   
:%s/old/new/gc 确认替换.
:#,&s/old/new/g 从 # 到 & 行无提示替换.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

adb remount
adb shell rm /system/app/BBKSoundRecorder.apk
adb shell rm /system/app/BBKSoundRecorder.odex
adb shell rm /data/data/com.android.bbksoundrecorder/shared_prefs/com.android.bbksoundrecorder_preferences.xml
adb shell rm /data/data/com.android.bbksoundrecorder/shared_prefs/syh.sharedprefs.storloca.onlyone_init.xml
adb push z:\share3\copy\copy\BBKSoundRecorder.apk system/app/
pause

adb shell cat /data/data/com.android.bbksoundrecorder/shared_prefs/com.android.bbksoundrecorder_preferences.xml
adb shell cat /data/data/com.android.bbksoundrecorder/shared_prefs/syh.sharedprefs.storloca.onlyone_init.xml

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

原创粉丝点击