這裡我們利用ADB來作示範,在裝完android SDK後,裡面就會包含了ADB,
以Windows為例,adb路徑會在android-sdks\platform-tools\adb.exe,所以在開啟terminal後,要先切到這個路徑下。
而Linux,裝好SDK,開啟terminal就可以用了。
使用之前裝置端要先開啟USB偵錯模式,路徑如下,設定>開發人員選項>USB偵錯
然後在電腦端輸入
$ adb devices會得到下面結果,表示已和裝置端連接成功
● 下列是Log class提供了幾個列印message到logcat的方法
v(String, String) (verbose)
d(String, String) (debug)
i(String, String) (information)
w(String, String) (warning)
e(String, String) (error)
一般在開發程式時,會在每個function的的第一行加上log,方便日後trace code
像下面這樣
Log.i("MyActivity", "test"); //log.i裡的i是指(information)LogCat就會輸出log成這樣
I/MyActivity( 1555): test
● 如何輸出LOG呢
$ adb logcat但這種方法log太多了,會印出全部的log,包含verbose/debug/information/warning/error
所以我們需要用到下列的方法過濾出我們要的部分
● 過濾log(Filtering Log Output)
每一個Android的log都包含了標籤(tag),和優先權(priority)
例如,I/MyActivity( 1557): test //I是優先權,又分成了下列幾種;MyActivity就是標籤
Android優先權:
V — Verbose (最低優先權)
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent (最高優先權,S表示不會用印出任何LOG)
為什麼分成七級呢?看到例子三就明白了
知道了android log之後,要如何過濾呢?我們用下面幾個例子來學習學習
例子一
//如果只想印出這種寫法Log.i("MyActivity", "test")的log,則要這樣寫 $ adb logcat MyActivity:I *:S //MyActivity:I是表示,印出MyActivity標籤及information優先權的log //*:S 是指其它所有的log都silent,也就是都不印出來例子二
//如果我們一次想看這2種logs,則該怎麼寫呢? //Log.i("MyActivity", "test"); //Log.d("MyActivity2", "test2"); $ adb logcat MyActivity:I MyActivity2:D *:S例子三
那如果這樣寫$ adb logcat *:W 會發生什麼事呢? 這樣就會印出所有log,且優先權在Warning以上的log,也就是Warning/Error/Fatal
● 延伸
一般我們在做phone的project時,就會常用到
$ adb logcat -v time -b radio //-v time是指出時間,-b radio是指印出radio和telephony相關訊息
●更多參考資料:
http://developer.android.com/tools/debugging/debugging-log.html#startingLogcat
沒有留言:
張貼留言