2011-09-12 12 views
2

Delphi 2007からDelphi XEに変換されたプロジェクトがあります。 2007年版では、JCLのデバッグ機能を使用して例外が表示されたときにスタックトレースを取得しました。 (それはをスロー "XEにはもうDelphi XEでJCLを使用したスタックトレースがありません

StackList := JclLastExceptStackList; 

デルファイ2007年に動作するように使用されるこの事はありません。実際には、我々は、スタックトレースを取得するための次の行に依存しているJCLの標準ExceptionDlgウィザードを使用しましたブランク 'スタック)。 (生憎)

我々はそれが動作する...古典

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

でその事を交換した場合(それゆえ我々はマップなどへの正しいsetingsのWRTを持っている)、それは存在スタックトレースを示してい(もちろん、例外ダイアログが表示されます)、の最後の例外のスタックトレースにはではありません。

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

TIA

答えて

3

あなたがJclStartExceptionTrackingを呼んでいましたか?

このメソッドは、最初に例外を接続し、通知機能を追加する責任があるようです。

function JclStartExceptionTracking: Boolean; 
begin 
    if TrackingActive then 
    Result := False 
    else 
    begin 
    Result := JclHookExceptions and JclAddExceptNotifier(DoExceptNotify, npFirstChain); 
    TrackingActive := Result; 
    end; 
end; 
+0

はい、ありました。実際には、生成されたルーチンで自動的に呼び出されます。 –

関連する問題