原始问题
给定以下方法,它是一个库的一部分(因此无法编辑)(A()
也是私有的,因此不能在m()
之外调用):
void m() {
try {
A();
} catch (Exception e) {
B();
throw e;
}
}
在调用
m()
时,A()
生成了一个异常e
,然后执行B()
。然而,B()
也抛出了一个异常,该异常被传递了上去(而不是e
,后者会在下一行被传递上去)。有没有可能找到
e
这个异常呢?也许可以使用一些智能的反射或多线程暂停-继续的方法?为什么我选择最佳答案以及其他有帮助的信息
Makoto的答案:
是我的问题的正确答案(即无法在程序中检索
e
丢失了,因为任何抛出的异常都会导致执行突然完成。
e
异常)。然而,我想指出Sean Patrick Floyd的评论:
以及Pinkie Swirl的评论:如果你不能改变代码,那么唯一的机会就是使用调试器,在catch块内设置断点。
实际上帮助我解决了我的问题:通过调试器(我遇到的异常是SQLException,所以我真的需要知道它是什么才能解决我的问题)。请注意,通过调试仍然可以看到e及其信息(堆栈跟踪等)