获取局部变量

时间:2011-01-06 22:05:08

标签: java debugging stack-trace local-variables

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

在Java中是否可行,这怎么可能呢?

干杯, 最大

4 个答案:

答案 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);
}