我试图跟踪IO资源泄漏,其中连接已打开但未必关闭:
try{
...
urlConnection.connect();
...
connectionResult.setResultInputStream(urlConnection.getInputStream());
return connectionResult;
} catch (IOException e) {
throw new ValidationException(e, new LocationData(submissionURL.toExternalForm(), -1, -1));
}
有没有办法找出ValidationException
将通过调用层次结构捕获的位置?手动步骤如下:
catch Exception
等)答案 0 :(得分:1)
Eclipse“开箱即用”肯定不支持这一点。他们可能是一个支持这个的Eclipse插件,但我没有听说过。 (这是你在实践中很少需要做的事情......所以没有理由去实现这个。)
代码分析的一种替代方法是破解代码以在您可以控制的某些情况下抛出异常,然后使用Java调试器来查看它实际被捕获的位置。
另一种选择可能是将自定义PMD规则混合在一起以识别相关的捕获量。我不认为这很简单......
答案 1 :(得分:0)
转到搜索 - > Java。在对话框中,您可以搜索构造函数并将“限制”设置为“引用”。这应该可以为您提供抛出异常的所有位置。
答案 2 :(得分:0)
动态分析怎么样?如果可以调试程序,则可以从“断点”视图设置“断点异常”。这是带有'!'的小按钮并且它上面有一个'J',它会在你抛出的异常被抛出的任何时候中断。然后你可以步骤查看它被捕获的位置。
当然,只会通过调试找到那些你可以练习的案例。
答案 3 :(得分:0)
您可以使用内存分析器,例如jvisualvm / visualvm,并对其进行日志对象分配。当您希望关闭所有资源时,请检查实时对象并找出它们的构建位置。
答案 4 :(得分:0)
错误296947 - [调用层次结构]查找catch块的异常位置 https://bugs.eclipse.org/bugs/show_bug.cgi?id=296947