2013-06-12 34 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指出

相关问题