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