2012-01-22 45 views
0

在Eclipse中調試代碼時,我遇到了以下問題。有一個WHILE循環可能有10,000次迭代。因此,在這裏使用Step並不是一個好主意。所以,我在這個WHILE循環之後放置了斷點。但看起來這個WHILE循環跑進了內部循環。我不知道如何找到導致此問題的正確迭代。有什麼辦法可以區分代碼和內部循環的長執行時間嗎?我該如何快速在代碼中找到這樣的死鎖地點?在Eclipse中調試代碼。內部循環案例

P.S.代碼可以在小數據集中正常工作...

回答

2

代碼的方法重寫測試 它不是更有可能是指數式放緩,就像在增長的LinkedList,分配,交易中搜索一樣。

if (i > 8000) { 
    show loop duration; // breakpoint here 
} else if (i > 6000) { 
    show loop duration; // breakpoint here 
} else if (i > 4000) { 
    show loop duration; // breakpoint here 
} 

因此,我將介紹秒錶如果迴路越來越慢。使用findBugs檢查手柄泄漏。最後用較小的方法重寫有助於遺留代碼。

3

如果您正在尋找死鎖,您可以在沒有中斷點的情況下在調試中運行程序,並等待它死鎖,然後停止它。

如果你希望它停止在一個特定的迭代上,你可以添加一個條件斷點,但是這會使執行速度變慢。

我要做的就是添加條件的代碼,類似

if (i == 10000 && condition) 
    Thread.yield(); // add break point here. 

,或者如果你有一個返回錯誤的值,你可以這樣做

boolean ok = method(); 
if (!ok) 
    method(); // add a break point here so you can see why it fails. 
+1

您實際上並不需要將條件放入代碼中。您可以通過斷點屬性直接指定它們作爲斷點。 – Perception

+0

這就是爲什麼我先推薦它。對於長時間運行的循環來說,這可能很慢。添加條件幾乎沒有開銷。 –