我遇到了一个古怪的旧应用程序,它在某个特殊情况下在一个奇怪的地方失败,在被调用的方法结束之后,但在调用被调用方法之后的行之前:
public void callingMethod() {
try {
log.write "Execution reaches here.";
calledMethod();
log.write "Execution does not reach here.";
} catch {
log.write "Execution does not reach here.";
} finally {
log.write "Execution does not reach here.";
}
log.write "Execution does not reach here.";
}
public calledMethodObject calledMethod() {
doSomeStuff();
calledMethodObject cmo = new calledMethodObject();
log.write "Execution reaches here.";
return cmo;
}
应用程序不使用返回的对象,但我也尝试在调用方法中放置一个以从被调用的方法接收返回的对象作为测试,但它没有帮助。
我已经确认这不是日志记录问题,因为我尝试了各种日志记录方法,例如电子邮件,结果是一致的。
有人建议我查看堆转储。但是,我不知道在哪里可以找到这个。它是Rube Goldbergesque应用程序:快捷方式调用VB6应用程序,该应用程序从服务器复制.jar。 VB应用程序通过名为CASCOM Bridge的旧技术调用Java方法。在某些时候,应用程序从不同服务器上的相同jar调用(而不是复制)方法。
我在哪里可以找到堆转储?
我也会对其他方法感兴趣,以找出在这种反直觉的位置失败的原因。