假设我有一个包含数千行代码的遗留Java应用程序:
try {
// stuff
} catch (Exception e) {
// eat the exception
}
是否有任何全局选项可以翻转或第三方JAR会记录所有“吃掉”的异常?我知道我可以做一个大规模的查找替换(搜索catch(异常e){并将其替换为catch(异常e){logException(e);)但我想知道是否有更好的解决方案。谢谢!
答案 0 :(得分:7)
您可以提供自己的Exception
实现,它在构造函数中记录堆栈跟踪。从java的手册页:
<强> -Xbootclasspath:启动类路径强>
指定以冒号分隔的目录列表,JAR存档, 和ZIP存档以搜索引导类文件。这些是 用于代替Java 2中包含的引导类文件 SDK。
答案 1 :(得分:5)
似乎是面向方面编程可以派上用场的地方。您可以设置异常处理程序切入点。查看AspectJ以获得更好的AOP实现。
答案 2 :(得分:0)
没有。如果代码捕获异常并且对它没有任何作用,那么在不更改代码的情况下,您无法做任何改变。
find-replace应该有效。但是,我强烈建议您稍后使用FindBugs进行检查,以确保找到了此问题的所有实例。 (无论如何,FindBugs应该是你的过程的一部分,但我只是指出它,以防任何阅读此内容的人都没有使用它。)
答案 3 :(得分:0)
这将允许您处理任何未捕获的异常:
Thread.setDefaultUncaughtExceptionHandler(
new Thread.UncaughtExceptionHandler(){
public void uncaughtException(Thread t, Throwable e) {
//handle the exception
}
});