詳細的用法請看原文:



HTTP://developer.android.com/guide/developing/tools/adb.html

 

其中有一種用法對於瞭解較為大型的程式流程非常有用,原文中的例子是:

 

adb logcat ActivityManager:I MyApp:D *:S



依個人經驗,在開發程式的時候,建議在每一個method()的第一行都下一個Log.d(),方便日後trace code。而且交接給別人維護時,別人只要執行一下程式順便把log印出來,馬上就能瞭解程式流程和架構。

 

舉例你有5個.java檔,分別是

 

A.java

 

B.java

 

C.java

 

D.java

 

E.java

 

裡面你可以為每支java都設立各自的tag,如:

 

TAG_A

 

TAG_B

 

TAG_C

 

TAG_D

 

TAG_E

 

在每一個程式的每一個method()都寫上Log.d("TAG_A",method name()); 其中TAG_A依不同程式TAG替換掉,而method_name()則依不同的method name替換掉。而adb logcat改下:

 

adb logcat TAG_A:D TAG_B:D TAG_C:D TAG_D:D TAG_E:D *:S >> log_file

 

或是

 

adb logcat | grep "TAG_"

 

如此一來,log_file裡面就不會有一大堆有的沒的其它不相關程式的log,而只會單純的顯示A~E.java這五支程式的log。又因為每支程式的method()第一行都有log.d(),所以就會變成光看log_file 就大致瞭解這個程式的流程了。

 

瞭解這種用法並加以變化應用,對學習較複雜的大型程式,非常有用!

 

另外,為了知道log發生的時間點,可以利用-v Time這個參數,比如:

 

adb logcat -v Time,則log會類似如下:

 

01-11 03:21:55.164 D/NotificationService( 237): mIntentReceiver() Intent.ACTION_BATTERY_CHANGED

 

01-11 03:21:55.164 D/NotificationService( 237): batteryCharging=true, level=100, status=5, health=2

 

01-11 03:21:55.164 D/PowerUI ( 313): onReceive , action=android.intent.action.BATTERY_CHANGED
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()