すでにデプロイされているアプリケーションからエラー レポートとしてスタック トレースを取得する場合、実際の変数値も取得して、例外がスローされる前の時点でのシステムの状態を再構築すると便利です。
そのようなことはJavaで実現可能ですか?どうすればそれを行うことができますか?
乾杯、マックス
すでにデプロイされているアプリケーションからエラー レポートとしてスタック トレースを取得する場合、実際の変数値も取得して、例外がスローされる前の時点でのシステムの状態を再構築すると便利です。
そのようなことはJavaで実現可能ですか?どうすればそれを行うことができますか?
乾杯、マックス
クラス、ファイル、メソッド、および行番号のみを含む 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);
}