5

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

  1. 运行为... Java 应用程序
  2. 让程序运行到我要调试的地方
  3. 当它到达那个点时调试那个程序。

我使用“运行方式...”而不是“调试方式...”启动程序的原因是程序在某些时候挂起(我怀疑是无限循环),但我无法始终如一地复制它. 我的意思是我可以让它始终挂起,但它发生在随机场合。

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

4

6 回答 6

9

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

于 2013-06-12T11:18:17.003 回答
5

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

于 2013-06-12T11:18:11.000 回答
2

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

在InformIT有关于如何做的基本解释。

一个快速的谷歌搜索产生了这个关于如何用 eclipse 做的教程。

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

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

于 2013-06-12T11:24:16.087 回答
1

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

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

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

于 2013-06-12T11:29:45.603 回答
0

也许您可以添加一些调试日志来查明它挂起的位置。

将其记录到文件中以将其记录在历史中的最佳方式。System.out.println("在某些代码之前"); 一些可能有问题的代码 System.out.println("after some code");

当您看到“在某些代码之后”未达到时,您就知道它在此部分之前挂起。或者,如果您使用 log4j 与 log4j 一起使用一些带有时间戳的调试信息,那么您可以更接近并将更多调试信息放在更靠近它挂起的位置,最终您将知道在哪里放置断点并单步执行代码。

于 2013-06-12T11:14:30.370 回答
0

“运行方式”永远不会选择断点,因此它不会停在您要调试的地方,因此您的问题的答案是否定的。但是您问题中的第 2 点与您在以下段落中的陈述相矛盾,其中你解释了为什么你选择不使用'debug as'。如果您不知道程序挂在哪里,您如何让程序运行到您要调试的位置?(第 2 点)。

正如@Nicola Musatti 指出的那样,我会使用“debug as”来调试它

于 2013-06-12T11:33:28.037 回答