我正在尝试跟踪 IO 资源泄漏,其中连接已打开,但不一定关闭:
try{
...
urlConnection.connect();
...
connectionResult.setResultInputStream(urlConnection.getInputStream());
return connectionResult;
} catch (IOException e) {
throw new ValidationException(e, new LocationData(submissionURL.toExternalForm(), -1, -1));
}
有没有一种方法可以通过调用层次结构找出 ValidationException
将被捕获的位置?手动步骤类似于:
- 调用包含方法的层次结构
- 对于每个来电者:
- 分析周围的代码,找到 try catch block
- 如果捕获到异常,评估流关闭
- 如果不是,重复1。
注意事项
- 这是不可重现的;只有一位客户在其故障转移环境中遇到此问题 - 产品版本已有 5 年历史,并且以前从未出现过此类问题。
- 我能找到所有抛出异常的情况;我想找到可以在哪里捕获这个特定抛出的异常(包括
catch Exception
等)
最佳答案
Eclipse“开箱即用”当然不支持这一点。他们可能是支持此功能的 Eclipse 插件,但我没听说过。 (这是您在实践中很少需要做的事情……因此没有理由去努力实现它。)
代码分析的一种替代方法是破解代码以在您可以控制的某些情况下抛出异常,然后使用 Java 调试器查看它实际被捕获的位置。
另一种替代方法可能是组合一个自定义 PMD 规则来识别相关的捕获量。我不认为这会很简单......
关于java - 是否有可能找到在 Eclipse 中捕获特定抛出异常的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5945066/