1

例外処理のためのコール スタックの取得に関する SO に関する投稿が多数あり、それを処理するための EurekaLog がありますが、ブレークポイントを配置した場合と同じように、実行時の任意の時点でスタックを取得できるようにしたいと考えています。 IDE。

レガシ コード内のどこかでイベントが発生し、想定外のことを実行している関数が実行されています。デバッグ出力から関数の名前を確認できますが、スタック トレースがなければ、実際に何を呼び出したのかわかりません。これは例外ではなく、EurekaLog を起動できるようにするためだけに、その関数で例外を発生させたくありません。

例外なくコールスタックを取得する方法はありますか?

4

2 に答える 2

7

スタック トレースを取得するために例外を発生させる必要はありません。EurekaLog のGetTracer()関数を呼び出してTEurekaBaseStackListオブジェクトを取得し、そのBuild()メソッドを呼び出してスタック トレースを取得します。EurekaLog のドキュメントで提供されている例を次に示します。

var
  CallStack: TEurekaBaseStackList;
begin
  CallStack := GetTracer(TracerWindows);
  try
    // Build current call stack including current execution point
    CallStack.Build(CallStack.GetCurrentInstruction);
    // ... use CallStack somehow
  finally
    FreeAndNil(CallStack);
  end;
end;
于 2015-07-08T23:45:43.347 に答える