2013-11-14 23 views
3

好吧,所以我有一個非常大的Java項目,我一直在努力多年(一個遊戲,如果你必須知道的話)。如何找到正在打印的神祕消息?

不幸的是,一個神祕的信息已經開始被打印。不管我搜索的時間長短,我都無法確定消息的位置。

我知道你可以重寫println方法,並且我很好奇,是否有可能在打印的消息中附加某種調試信息?就像它可能打印的行或文件一樣?我試着在Google上搜索這個,但是這個問題太簡單了,我找不到答案。

更糟的是,消息非常含糊。它只是「-1」。

至少我現在知道使用適當的記錄器而不是簡單的println()。

+0

有什麼理由grep不會顯示它嗎?我的第一個想法是使用某種模擬框架攔截函數調用並打印堆棧跟蹤。 – AdamSpurgin

+0

希望你的*非常大的項目*是以模塊化方式編寫的,允許進行單元測試和嘲諷。否則,我不知道你應該如何解決這個問題,而不是重新編寫它,以便它*是*可測試的。您的問題沒有提供足夠的信息,可以直接回答。 –

+0

我假設你使用IDE?例如,在eclipse中,您可以搜索所有的項目空間以獲取方法調用或純字符串(如-1),我將搜索字符串「-1」,在某處,必須定義它的位置,您可以從那裏跟蹤它。除非它來自外部.jar,否則很難找到它。 – arynaq

回答

6

在這種情況下,您可以在ide中使用條件斷點。這是ide的一個非常有用的功能,並不總是衆所周知的。

您設置一個斷點,你希望它只是某些條件下暫停該應用程序,在這種情況下的println方法是你的「神祕ufindable字符串」

Intelllij IDEA這種情況下的參數應該是這樣的:

enter image description here

+0

好吧,我做了這件事,現在我忘了這個消息。哈克,但對我來說足夠好:) –

2

你可以做

new Exception().printStackTrace() 

或類似的沒有拋出創建例外以獲取當前執行點一個完整的堆棧跟蹤。而且沒有必要扔掉它。您可以將它們保存到列表中供以後處理。

+0

我會試試這個。謝謝,安德烈。 –

-1

這看起來像從ArrayIndexOutOfBoundsException異常的消息。在這種類型的異常上添加斷點。試試這個:

String[] arr = new String[0]; 
try{ 
    System.out.println(arr[-1]); 
}catch (Exception e){ 
    System.out.println(e.getMessage()); 
}