2013-06-12 59 views
4

什麼我問的是,如果有可能做的,以下列步驟:是否可以在Eclipse中調試已經運行的Java程序?

  1. 運行方式... Java應用
  2. 讓程序運行,直到它達到我想要調試
  3. 程序到達該點時調試該程序。

我之所以使用「Run as ...」而不是「Debug as ...」啓動程序,是因爲程序在某個時刻掛起(我懷疑是無限循環),但是我無法一貫地複製它。我的意思是說,我可以讓它一直掛起,但它發生在隨機場合。

對於它的價值,我的程序是一個遊戲,它在遊戲中的不同位置掛起,這就是爲什麼我不能確定在哪裏放置斷點,所以如果我可以讓它運行首先,然後在掛起/循環的位置切換到調試。

+0

它是多線程嗎?你有沒有嘗試將調試消息記錄到文件?根據我的經驗,最後的消息通常是有用的。 – David

+0

如果您知道它掛起的位置,可以在該點之前放置一個調試點並將其作爲「Debug-As」執行? – NINCOMPOOP

+0

似乎它是一個多線程程序。然後,如果難以直接調試,則可能需要一些記錄重播工具來進行調試。 – StarPinkER

回答

9

爲什麼不直接使用「調試爲...」執行程序而不設置任何斷點。然後,當它掛起時,切換到Eclipse的調試視角並使用雙豎線按鈕暫停程序?

+0

好主人...... -_-這正是我一直在尋找的東西。我不知道我能做到這一點。謝謝。 – heisenbergman

0

也許你可以添加一些調試日誌記錄來查明它掛起的地方。

最好的方法將它登錄到文件中以使其在歷史中。 System.out.println(「在某些代碼之前」); 某些代碼可能存在問題 System.out.println(「after some code」);

當你將「沒有達到一些代碼」後,你會知道它掛在這部分之前。 或者如果你使用log4j,用log4j做一些帶時間戳的調試信息,那麼你可以靠近一些並且把更多的調試信息放在它掛起的地方,最後你會知道把斷點放在哪裏,並且通過代碼步驟。

+0

你可以,但它不是真正的最佳解決方案 – NimChimpsky

+0

但是,這將是完全相同的使用看看它是否在它之前掛起。 – Matsemann

+0

但是當它隨機掛起時,你可以多次運行它,然後你有登錄文件,例如它不需要打印 – Mateusz

5

如果您始終使用「調試爲...」運行它,您可以在程序掛起時暫停執行。這將打開調試器並允許您檢查正在運行的線程。

0

除了建議不設置任何斷點的解決方案之外,您還可以考慮將java調試器附加到正在運行的程序。

關於如何在InformIT有基本的解釋。

快速谷歌搜索取得this tutorial關於如何使用eclipse做到這一點。

如果我沒有記錯,您必須使用其他參數啓動程序才能連接 - 如果程序完全凍結,這可能會遇到問題,因爲這可能會阻止連接工作:請參閱this stackoverflow question瞭解更多信息。

這實際上會在調試模式下啓動您的應用程序,但您可以推遲附加調試器直到您確實需要它。

1

您可以在eclipse中使用'Remote Java Application'功能來附加到Java虛擬機。你需要啓動應用程序時添加額外的參數:

-Xdebug -Xrunjdwp:交通= dt_socket,地址=,服務器= Y,暫停= N

你可以筘這裏:http://blog.javachap.com/index.php/debugging-in-java/

0

「 Run As'從來沒有選擇斷點,因此它不會停在你想要調試的地方,所以你的問題的答案是否定的。但是,在你的問題中沒有2與你在下面的段落中的陳述相矛盾解釋你爲什麼選擇不使用'調試爲'。如果您不知道程序掛起的位置,那麼如何讓程序運行直到達到您想要調試的地步? (點號2)。

我會用'debug as'作爲@Nicola調試它Musatti指出

相關問題