2013-05-21 74 views
1

爲了理解系統在做什麼的調試工作,我想使用java調試器條件斷點機制在Android源代碼中的特定行上打印日誌消息。使用Eclipse斷點打印Android源代碼的日誌?

我該怎麼做?我不完全知道,這就是這個問題。

東西我知道:
Eclipse的Java調試器具有「條件斷點」,即你在代碼中設置一個斷點,你寫的條件。每次代碼到達斷點行時,只有當您寫入的條件爲true時,它纔會停止執行,否則它不會停止。

我雖然也許這種機制可以扭曲在代碼中的特定行打印日誌消息,而不是停止執行。如果可以完成,我可以跟蹤Android的源代碼在做什麼。

+0

我不明白的問題,請提高。 – Warpzit

+0

@Warpzit我重寫了它。我希望現在更清楚。 – ilomambo

回答

1

您可以使用下面的表達式在條件斷點:

android.util.Log.v("MyApp", "my message") == -1 

這會讓你的斷點不破的執行,並在logcat中查看,篩選使用tag:MyApp表達的觀點,你會得到想要的記錄的消息。您還可以使用其他日誌級別(a,i,e,w)。有關更多信息,請參閱日誌documentation

要具有斷點總是打破,用途:

android.util.Log.v("MyApp", "my message") >= 0 

Log.v返回值是日誌信息的內部具有的字節數,所以它總是一個正數。

附錄: 有一個更優雅的方式來做到這一點。 Eclipse條件斷點可以是任何Java代碼,包括在斷點處使用局部變量。如果您確實想要停止執行,則最後的返回值必須爲truefalse。所以,同樣可以實現爲:

android.util.Log.v("MyApp", "my message"); 
return false; 

,或者您可以使用更復雜的語句,如:

if(t.isNumber()) { 
    System.out.println("A number found"); 
} else { 
    System.out.println("Not a number"); 
    return true; // stops execution 
} 
android.util.Log.v("MyApp", "my message"); 
return false; // does not stop execution 
+0

你是個天才!奇蹟般有效! – ilomambo

+0

我知道! (...它就像一個魅力:P) –

+0

也許你也知道爲什麼斷點條件不能識別我的包名?我寫了'(com.example.test.MyClass.stop == 2)','stop'作爲MyClass的'public static int'。 Eclipse告訴我**條件斷點有編譯錯誤。原因:com.example不能解析爲變量** – ilomambo