adb logcat

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

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

發佈了82 篇原創文章 · 獲贊 5 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章