5

当从已部署的应用程序获取堆栈跟踪作为错误报告时,获取实际变量值以在引发异常之前重建系统状态将很有帮助。

在 Java 中这样的事情是可行的吗?怎么能做到呢?

干杯,马克斯

4

4 回答 4

2

我很确定您无法在 stacktrace 中获取局部变量,因为输出是从 StackTraceElement 实例构建的,该实例仅包含类、文件、方法和行号(请参阅http://download.oracle.com /javase/6/docs/api/java/lang/StackTraceElement.html)。

于 2011-01-06T23:03:32.390 回答
2

看看这个工具:

http://www.chrononsystems.com/

它允许您跟踪堆栈跟踪,并选择在应用程序的时间轴中及时返回。我自己没有尝试过,但对于您所指的情况类型(意外异常),它看起来非常有希望。

很高兴听到它是否有帮助:)

于 2011-09-28T08:40:24.307 回答
1

如果您使用诸如Eclipse之类的 IDE - 您可以使用调试工具通过程序的整个执行来查看这一点。

于 2011-01-06T22:09:45.313 回答
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);
}
于 2011-01-06T22:09:48.267 回答