如何用java编写虚拟条件断点

如何用java编写虚拟条件断点,java,debugging,Java,Debugging,我很抱歉,如果问题的标题可能会错误地告诉你,但我找不到一个合适的词来解释这一点 如果您曾经使用.NET,您会知道存在一个Assert类,该类将自动唤醒并在必要时附加调试器,然后在Assert命令失败时让调试器(Visual Studio)在Assert命令处暂停 假设我正在运行一个java程序,并且已经连接了调试器,那么我怎么能让调试器在某些情况下中断,而不手动设置中断点呢 我期待着这样的事情: void doSomeThing(String x){ if (x==null) breakD

我很抱歉,如果问题的标题可能会错误地告诉你,但我找不到一个合适的词来解释这一点

如果您曾经使用.NET,您会知道存在一个Assert类,该类将自动唤醒并在必要时附加调试器,然后在Assert命令失败时让调试器(Visual Studio)在Assert命令处暂停

假设我正在运行一个java程序,并且已经连接了调试器,那么我怎么能让调试器在某些情况下中断,而不手动设置中断点呢

我期待着这样的事情:

void doSomeThing(String x){
   if (x==null) breakDebuggerNow();
}

如果使用eclipse,则可以通过上下文菜单(右键单击断点)修改断点视图中的断点(根据调试透视图中的默认值)。
您可以设置命中计数或启用条件。另一个选项是触发异常,单击带有“J!”的图标设置并选择一个特定的异常。

据我所知,Java中没有这样的功能。如果未连接调试器,JVM不知道调试器。对于.Net来说,这是Windows在这方面的优势。然而,有一种专门用于这种用途的方法。它将引发java.lang.AssertionError,该错误不是
异常
,因此不应该由常规的
捕获
es处理。如果您的调试器被设置为处理未处理的异常(或者更确切地说是可丢弃的),它将捕获这种情况。

对我来说研究太多了。。。嗯,看起来我快到了。但是,断言错误不是也可以由Eclipse处理吗?我发现Eclipse也可以钩住AssertionError。是的,任何足够好的Java调试器都可以处理一些特定的异常和/或错误,Eclipse肯定有足够好的调试器。我不能给您一个很好的建议,告诉您应该如何准确地配置Eclipse,因为我已经习惯了这个想法,但我认为这并不难做到。我的观点是,在Java中,您必须将调试器连接到应用程序以处理断言失败,并且应该期待一个稍微不同的事情(
AssertionError
)。但在其他方面,这与.Net世界中的功能完全相同。