3

Delphi2007からDelphiXEに変換したプロジェクトがあります。2007バージョンでは、JCLのデバッグ機能を使用して、例外が発生したときにスタックトレースを取得しました。実際、スタックトレースを取得するために次の行に依存するJCLの標準のExceptionDlgウィザードを使用しました。

StackList := JclLastExceptStackList;

これはDelphi2007で機能していましたが、XEでは機能しなくなりました(「空白」スタックをスローします)。

そのことを古典的なものに置き換えると

   StackList := JclCreateStackList(false,0,Caller(0,false));
   lTemp := TStringList.Create;
   StackList.AddToStrings(lTemp,true,true,true,true);
   ShowMessage(lTemp.Text);
   lTemp.Free;
   Stacklist.Free;

...動作します(したがって、マップなどにWRTが正しく設定されています)が、(残念ながら)現在のスタックトレース(もちろん、例外ダイアログが表示されます)が表示され、最後のスタックトレースは表示されません。例外。

これを修正する方法はありますか?

TIA

4

1 に答える 1

3

電話しましたJclStartExceptionTrackingか?

このメソッドは、最初に例外を接続し、通知機能を追加する役割を担っているようです。

function JclStartExceptionTracking: Boolean;
begin
  if TrackingActive then
    Result := False
  else
  begin
    Result := JclHookExceptions and JclAddExceptNotifier(DoExceptNotify, npFirstChain);
    TrackingActive := Result;
  end;
end;
于 2011-09-12T10:27:46.610 に答える