5

すでにデプロイされているアプリケーションからエラー レポートとしてスタック トレースを取得する場合、実際の変数値も取得して、例外がスローされる前の時点でのシステムの状態を再構築すると便利です。

そのようなことはJavaで実現可能ですか?どうすればそれを行うことができますか?

乾杯、マックス

4

4 に答える 4

2

クラス、ファイル、メソッド、および行番号のみを含む 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 に答える