是否存在“Break on exception”;在IntelliJ吗?

是否有在第一次出现异常时自动中断调试的特性?

所以我们

  1. 启动应用程序
  2. 做一些抛出异常的事情
  3. 得到IntelliJ弹出突出显示行异常发生。
91363 次浏览

执行|查看断点|异常断点

是的,有。您需要在IntelliJ IDEA中的断点对话框中定义一个异常断点(它可以是“Any exception”)。

异常可以根据条件或类进行过滤(如果需要的话),也可以根据您是否对捕获或未捕获的异常感兴趣进行过滤。

弹出对话框的快速方法是按Ctrl + 转变 + F8(在Mac上:Cmd + 转变 + F8),然后单击到异常断点选项卡。如果这是您正在查看的最后一个选项卡,它仍然会被选中,从而很容易打开和关闭异常。

这将导致IntelliJ在引发异常的代码(或库代码)中中断。具体来说,在堆栈遍历寻找catch/finally块执行之前,您获得了异常处理的“第一次机会”。


提示:当加载类时,Java倾向于在内部抛出大量异常,因此这种对所有异常的中断会变得相当乏味。好消息是,您可以使用条件字段排除某些类型的异常。

例如:

!(this instanceof java.lang.ClassNotFoundException)

你可以用&&将多个这样的条件链接在一起。

enter image description here

如果单击左上角的小“+”符号,就可以添加一个新的断点。如果您选择异常断点,您将看到一个小对话框,您可以在其中输入要中断的异常类(如果您不想中断所有异常)。

IntelliJ IDEA 14中转到:

Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"

如果你不取消选中Caught Exceptions,每次Java Framework抛出内部异常时,执行就会停止。

在intellij的新版本中,它位于运行 >查看断点

然后你可以检查Java异常断点 ->任何异常

调试异常的一个好方法是使用主应用程序包和通配符.*。通过这种方式,你可以跳过所有其他库异常,因为大多数时候你是在寻找由你的应用程序抛出的异常,而不是由任何其他库抛出的异常(可能有很多异常)。

如图所示,每次应用抛出异常时,我使用com.gs.mercury.*来中断。如果您使用异常的目的是(处理异常情况,而不是处理正常情况的流),那么您几乎总是在遇到所需异常时才会停止。

PD。添加的答案只是为了指出非常有用的捕获类过滤器

Breakpoints