【发布时间】:2010-10-30 09:44:17
【问题描述】:
是否有在第一次发生异常时会自动中断调试的功能?
所以我们
- 启动应用程序
- 做一些引发异常的事情
- 在发生异常的地方弹出 IntelliJ 突出显示的行。
【问题讨论】:
标签: debugging exception intellij-idea
是否有在第一次发生异常时会自动中断调试的功能?
所以我们
【问题讨论】:
标签: debugging exception intellij-idea
运行 |查看断点 |异常断点
【讨论】:
弹出对话框的快速方法是按 Ctrl + SHIFT + F8(在 Mac 上:Cmd kbd> + SHIFT + F8),然后单击到异常断点选项卡。如果这是您查看的最后一个选项卡,它仍会被选中,从而可以轻松打开和关闭异常中断。
这将导致 IntelliJ 在代码(或库代码)中引发异常的位置中断。具体来说,在遍历堆栈以查找要执行的 catch/finally 块之前,您将获得“第一次机会”处理异常。
提示:Java 在加载类时往往会在内部抛出大量异常,因此打破所有异常可能会变得非常乏味。好消息是您可以使用 condition 字段排除某些类型的异常。
例如:
!(this instanceof java.lang.ClassNotFoundException)
您可以将多个此类条件与&& 链接在一起。
【讨论】:
在 IntelliJ IDEA 14 中转到:
Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"
如果您不取消选中Caught Exceptions,则每次Java Framework 引发内部异常时都会停止执行。
【讨论】:
是的,有。您需要在 IntelliJ IDEA 的断点对话框中定义一个异常断点(可以是“任何异常”)。
如果需要,可以按条件或类过滤异常,或者根据您是否对捕获的或未捕获的异常感兴趣。
【讨论】:
在较新版本的 intellij 中,它位于 Run > View Breakpoints 下。
然后你可以检查Java Exception Breakpoints -> Any Exception。
调试异常的一个好方法是使用您的主应用程序包和通配符.*。这样您就可以跳过所有其他库异常,因为大多数时候您正在寻找由您的应用程序而不是任何其他库抛出的异常(这可能是很多异常)。
作为图像中显示的示例,我使用com.gs.mercury.* 在应用程序每次抛出异常时中断。如果您将异常用于它们的用途(处理异常情况而不是处理正常情况的流程),您只会在几乎所有时间都达到所需的异常时停止。
PD。添加答案只是为了指出非常有用的Catch 类过滤器。
【讨论】:
如果你点击左上角的小“+”号,你可以添加一个新的断点。如果您选择异常断点,您会看到一个小对话框,您可以在其中输入要中断的异常类(以防您不想中断所有异常)。
【讨论】: