IntelliJ中是否存在“异常中断”?


Answers:



158

弹出对话框的快速方法是按Ctrl+ SHIFT+ F8(在Mac上为Cmd+ SHIFT+ F8),然后单击到异常断点选项卡。如果这是您正在查看的最后一个选项卡,则仍将其选中,从而可以轻松地打开和关闭异常。

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


提示:Java在加载类时往往会在内部抛出很多异常,因此,打破所有异常可能会变得非常乏味。好消息是您可以使用条件字段排除某些类型的异常。

例如:

!(this instanceof java.lang.ClassNotFoundException)

您可以使用将多个此类条件链接在一起&&

在此处输入图片说明


9
有没有办法告诉“仅从我的项目(而不是从Java系统)中断异常”?
该死的蔬菜

16
不要忘记“在选定的断点被击中之前禁用:” -这是令人惊奇的。加载并设置所有Java或其他库后,只需在代码中设置一个断点即可。然后从下拉列表中选择断点,然后等待。您的断点将被击中,一旦击中继续,您的新Caught&Uncaught Exception过滤器将启动。:)
Louis St-Amour

1
不要忘记在“断点”对话框的底部同时选中“捕获的异常”和“未捕获的异常”。
罗比诺

59

IntelliJ IDEA 14中转到:

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

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


1
运行->查看断点...->检查“ Java异常断点”->取消选中“捕获的异常”
Jonas

2
不幸的是,即使在禁用“捕获的异常”之后,这仍然无法解决捕获到的异常。
Carcigenicate's

我会说这是非常重要的信息,否则,这是一个没有信息价值的例外。主要在使用像Grails这样的大框架时。
David FerenczyRogožan19年

好的,我改变了主意-带有和不带有捕获到的异常的两个选项都是不好的,因为通常在典型的Web应用程序中,所有异常都曾经被捕获,所以有一个顶级catch块可以捕获所有内容并将其格式化为呈现给用户。因此,没有捕获到的异常,它就不会中断任何事情,有了它们,它在单个请求中便会中断数百次。都没用:(
David FerenczyRogožan19年

如果您知道如何使用它,那没有什么是没有用的。
亚历山德罗·弗拉蒂

12

就在这里。您需要在IntelliJ IDEA的断点对话框中定义一个异常断点(可以是“任何异常”)。

如果需要,可以按条件或类过滤异常,也可以根据是否对捕获的异常或未捕获的异常感兴趣来过滤异常。


7

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


0

在intellij的较新版本中,在“ 运行” >“ 查看断点”下

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

调试异常的一种好方法是使用主应用程序包和通配符.*。这样,您就跳过了所有其他库异常,因为大多数情况下,您都是在寻找应用程序而不是其他任何库抛出的异常(这可能是很多异常)。

如图像中所示的示例,我com.gs.mercury.*每次应用程序引发异常时都会中断。如果您将异常用于其目的(处理异常情况而不处理正常情况),则只有在几乎所有时间都达到所需的异常时才会停止。

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

断点

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.