【问题标题】:In Eclipse, how can I find Java code that throws a certain Exception?在 Eclipse 中,如何找到引发特定异常的 Java 代码?
【发布时间】:2018-06-10 01:23:00
【问题描述】:

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

为此,在 Eclipse 中,我可以在 Exception 类上使用“查找引用”。但是,这会找到 throwcatch 异常的地方。

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


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

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

【问题讨论】:

  • 也许搜索new YourExceptionType(throws YourExceptionType
  • 或者搜索异常构造函数的引用。
  • @luk2302:是的,我考虑过。但是,我想使用“真正的”代码搜索,而不是字符串搜索(它会被换行符、cmets 等东西抛弃)。
  • 好的,然后搜索您的异常或一般构造函数的用法:类的实例化 - 不确定在 Eclipse 中如何/是否可行。
  • @luk2302:是的,刚刚发现这是可能的 - 请参阅我的回答 :-)。

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


【解决方案1】:

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


说明:

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

两个限制:

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

灵感来自similar Eclipse bug 296947

【讨论】:

  • 我在发布问题后几分钟就找到了这个解决方案。这表明询问 SO 会给你带来新的想法 :-)。
【解决方案2】:

在 IntelliJ 中,您可以执行所谓的“结构搜索”。对“new A()”使用这个结构搜索确实找到了下面使用的所有 3 个实例:

private static class A { }

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

    new

            A();

    new    A(


    );
}

https://www.quora.com/How-can-IntelliJ-style-Structural-Search-and-Replace-be-done-on-Eclipse 提示在 Eclipse 中执行相同操作,方法是使用正则表达式进行“简单”搜索,并在正则表达式中尽可能使用 \W 来“忽略”换行符、空格、制表符等。new(\W+)A(\W*)\( 实际上效果很好。

我知道这不是一个完整的答案,但也许您可以通过了解 IntelliJ 用于此目的的术语了解更多信息

【讨论】:

    【解决方案3】:

    假设我们不是在讨论 NPE 或 ClassCastException 之类的间接抛出,并且假设我们在创建异常的地方抛出一个异常,您可以调用异常构造函数的调用层次结构。

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

    【讨论】:

    • 您好,感谢您的回答!我对其进行了编辑以澄清,希望你不介意。
    • 很好 - 这是一种更短的方法来找到与我自己的答案相同的结果。请注意,同样的警告也适用(因为它发现异常创建,而不是异常抛出)。
    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多