在Eclipse中,如何找到抛出某个异常的Java代码?

时间:2017-12-29 16:18:08

标签: java eclipse exception code-analysis static-analysis

在尝试理解Java代码时,我有时希望找到所有代码,其中某个自定义异常(即java.lang.Exception的子类)被抛出。

为此,在Eclipse中我可以在Exception类上使用“Find References”。但是,它会找到抛出这两个地方并将捕获放置在异常位置。

有没有办法专门找到抛出某个异常的代码?

相关问题:Eclipse: find lines in a block that can throw exceptions

然而,这个问题是关于在单个代码块中查找所有位置,而我的问题是关于在项目的多个类中查找所有位置。

3 个答案:

答案 0 :(得分:2)

在IntelliJ中,您可以进行所谓的"结构搜索"。使用此结构搜索" new A()"确实找到下面使用的所有3个实例:

private static class A { }

public static void main(String[] args) {
    new A();

    new

            A();

    new    A(


    );
}

enter image description here

https://www.quora.com/How-can-IntelliJ-style-Structural-Search-and-Replace-be-done-on-Eclipse通过做一个简单的"提示在Eclipse中做同样的事情。使用正则表达式进行搜索并在正则表达式中尽可能使用\W来"忽略"换行符,空格,制表符等new(\W+)A(\W*)\(实际上效果很好。

我知道这不是一个完整的答案,但也许你可以找到更多知道IntelliJ用于此目的的术语

答案 1 :(得分:2)

这可以通过使用"Java Search",并将匹配限制为实例创建。

说明:

  • 打开“Java Search”(菜单“Search”/“Java ...”或工具栏图标)
  • 作为搜索字词,输入您要查找的例外的完全限定名称
  • “搜索”:“类型”
  • “限制到”:“匹配位置”,然后在链接的详细信息选择中,仅选择“类实例创建”

两个限制:

  • 这也会找到在不抛出异常的情况下创建异常的代码(异常,但可能)。
  • 这将找到捕获然后重新抛出异常的代码 - 这可能是您想要的也可能不是。

similar Eclipse bug 296947启发。

答案 2 :(得分:1)

假设我们没有讨论像NPE或ClassCastException这样的间接抛出,并且假设我们在创建异常的地方抛出异常,则可以调用Exception构造函数的调用层次结构。

Eclipse的“调用层次结构”不仅可以用于方法,还可以用于类 - 然后它将显示所有构造函数的调用。使用Exception类上的Call Hierarchy来查找构造函数调用,即使在第3级库中也是如此。