是否可以在Eclipse中调试已运行的Java程序?

时间:2013-06-12 11:10:12

标签: java eclipse

我要问的是,是否可以按顺序执行以下步骤:

  1. 以...运行... Java应用程序
  2. 让程序运行直到达到我要调试的程度
  3. 当程序到达那一点时调试该程序。
  4. 我使用“Run as ...”而不是“Debug as ...”启动程序的原因是因为程序在某个时刻挂起(我怀疑是一个无限循环),但我无法一贯地复制它。我的意思是我可以让它一直挂起,但它会在随机场合发生。

    对于它的价值,我的程序是一个游戏,它挂在游戏的不同点,这就是为什么我不能确定在哪里放置一个断点,所以如果我能让它先运行会很好然后在挂起/循环的位置切换到debug。

6 个答案:

答案 0 :(得分:9)

为什么不用“Debug as ...”执行程序而不设置任何断点。然后,当它挂起时,切换到Eclipse的调试透视图并使用双垂直条按钮暂停程序?

答案 1 :(得分:5)

如果您始终使用“Debug as ...”运行它,则可以在程序挂起时暂停执行。这将打开调试器并允许您检查正在运行的线程。

答案 2 :(得分:1)

除了建议不设置任何断点的解决方案之外,您还可以考虑将java调试器附加到正在运行的程序。

InformIT有基本的解释说明。

快速谷歌搜索产生this tutorial如何使用eclipse。

如果我没记错的话,你必须使用附加参数来启动你的程序以允许附加 - 如果你的程序被完全冻结,这可能会成为一个问题,因为这可能会阻止附加工作:检查this stackoverflow question是否更多信息。

这实际上会在调试模式下启动您的应用程序,但您可以推迟附加调试器,直到您真正需要它为止。

答案 3 :(得分:1)

您可以使用eclipse中的“远程Java应用程序”功能连接到Java虚拟机。您需要在启动应用程序时添加其他参数:

-Xdebug -Xrunjdwp:transport = dt_socket,address =,server = y,suspend = n

你可以在这里更多地了解:http://blog.javachap.com/index.php/debugging-in-java/

答案 4 :(得分:0)

也许你可以添加一些调试日志来精确定位它挂起的位置。

将其记录到文件中以将其保存在组织中的最佳方式。     System.out.println(“在某些代码之前”);     一些可能有问题的代码     System.out.println(“在一些代码之后”);

如果你没有达到“在某些代码之后”,你知道它在这部分之前就已经悬空了。 或者如果你使用log4j用log4j做一些带有时间戳的调试信息,那么你可以更接近并将更多的调试信息放在它挂起的地方附近,并且最终你会知道在哪里放置断点并逐步通过代码。

答案 5 :(得分:0)

'Run As'永远不会选择断点,因此它不会停留在您想要调试的地方,因此您的问题的答案是否定的。但是您的问题中的第2点与您在段落中的陈述相矛盾下面你解释为什么你选择不使用'debug as'。如果您不知道程序挂起的位置,那么如何让程序运行直到达到您想要调试的程度? (点2)。

我会使用'debug as'调试它,因为@Nicola Musatti指出