当从已部署的应用程序获取堆栈跟踪作为错误报告时,获取实际变量值以在抛出异常之前重建系统状态将会很有帮助。
在Java中是否可行,这怎么可能呢?
干杯, 最大
答案 0 :(得分:2)
我很确定你无法在stacktrace中获取局部变量,因为输出是从StackTraceElement的实例构建的,它只包含类,文件,方法和行号(参见http://download.oracle.com/javase/6/docs/api/java/lang/StackTraceElement.html)
答案 1 :(得分:2)
看看这个工具:
http://www.chrononsystems.com/
它允许您跟踪堆栈跟踪,并选择在应用程序的时间轴中返回。我自己没有尝试过,但它看起来很有希望你所指的那种情况(意外的异常)。
听听它是否有帮助会很好:)
答案 2 :(得分:1)
如果使用诸如Eclipse之类的IDE,则可以使用调试工具在整个程序执行过程中查看此内容。
答案 3 :(得分:0)
唯一可能发生的方法是,如果系统状态可通过异常捕获链中更高的可用变量或异常对象本身(在自定义异常的情况下)到达:
public class MySpiffyException extends RuntimeException
{
final private int foo;
final private String bar;
public MySpiffyException(String message, int foo, String bar) {
super(message); this.foo = foo; this.bar = bar;
}
public MySpiffyException(Throwable cause, int foo, String bar) {
super(cause); this.foo = foo; this.bar = bar;
}
public int getFoo() { return this.foo; }
public String getBar() { return this.bar; }
}
...
public void someCode() {
...
int foo = ...;
String bar = ...;
if (foo > 0)
throw new MySpiffyException(foo, bar);
}