在Eclipse中調試代碼時,我遇到了以下問題。有一個WHILE循環可能有10,000次迭代。因此,在這裏使用Step並不是一個好主意。所以,我在這個WHILE循環之後放置了斷點。但看起來這個WHILE循環跑進了內部循環。我不知道如何找到導致此問題的正確迭代。有什麼辦法可以區分代碼和內部循環的長執行時間嗎?我該如何快速在代碼中找到這樣的死鎖地點?在Eclipse中調試代碼。內部循環案例
P.S.代碼可以在小數據集中正常工作...
在Eclipse中調試代碼時,我遇到了以下問題。有一個WHILE循環可能有10,000次迭代。因此,在這裏使用Step並不是一個好主意。所以,我在這個WHILE循環之後放置了斷點。但看起來這個WHILE循環跑進了內部循環。我不知道如何找到導致此問題的正確迭代。有什麼辦法可以區分代碼和內部循環的長執行時間嗎?我該如何快速在代碼中找到這樣的死鎖地點?在Eclipse中調試代碼。內部循環案例
P.S.代碼可以在小數據集中正常工作...
代碼的方法重寫測試 它不是更有可能是指數式放緩,就像在增長的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檢查手柄泄漏。最後用較小的方法重寫有助於遺留代碼。
如果您正在尋找死鎖,您可以在沒有中斷點的情況下在調試中運行程序,並等待它死鎖,然後停止它。
如果你希望它停止在一個特定的迭代上,你可以添加一個條件斷點,但是這會使執行速度變慢。
我要做的就是添加條件的代碼,類似
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.
您實際上並不需要將條件放入代碼中。您可以通過斷點屬性直接指定它們作爲斷點。 – Perception
這就是爲什麼我先推薦它。對於長時間運行的循環來說,這可能很慢。添加條件幾乎沒有開銷。 –