当从已部署的应用程序获取堆栈跟踪作为错误报告时,获取实际变量值以在引发异常之前重建系统状态将很有帮助。
在 Java 中这样的事情是可行的吗?怎么能做到呢?
干杯,马克斯
当从已部署的应用程序获取堆栈跟踪作为错误报告时,获取实际变量值以在引发异常之前重建系统状态将很有帮助。
在 Java 中这样的事情是可行的吗?怎么能做到呢?
干杯,马克斯
我很确定您无法在 stacktrace 中获取局部变量,因为输出是从 StackTraceElement 实例构建的,该实例仅包含类、文件、方法和行号(请参阅http://download.oracle.com /javase/6/docs/api/java/lang/StackTraceElement.html)。
看看这个工具:
http://www.chrononsystems.com/
它允许您跟踪堆栈跟踪,并选择在应用程序的时间轴中及时返回。我自己没有尝试过,但对于您所指的情况类型(意外异常),它看起来非常有希望。
很高兴听到它是否有帮助:)
如果您使用诸如Eclipse之类的 IDE - 您可以使用调试工具通过程序的整个执行来查看这一点。
发生这种情况的唯一方法是,是否可以通过异常捕获链中更高层的可用变量或异常对象本身(在自定义异常的情况下)访问相关系统状态:
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);
}