1

ユニットのファイナライズ セクションに問題があり、unloadDLL 呼び出しでデッドロックが発生します。私はそれがどれであるかという疑いを持っていますが、少し確認したいと思います.

呼び出しコードは内部にsystem.pas.FinalizeUnitsあり、次のようになります。

while Count > 0 do
begin
  Dec(Count);
  InitContext.InitCount := Count;
  P := Table^[Count].FInit;
  if Assigned(P) then
  begin
{$IFDEF LINUX}
    CallProc(P, InitContext.Module^.GOT);
{$ENDIF}
{$IFDEF MSWINDOWS}
    TProc(P)();
{$ENDIF}

ここで、P はユニットのファイナライズ ルーチンへのポインタです。

デバッグモードでは、評価/変更TProc(P)して(値なし)を与えることができますが、これを検査すると、Debug Inspectorにユニットとプロシージャ名が表示されます。

この出力をウォッチに取得する方法はありますか?毎回デバッグ インスペクターを設定する必要はありません。または、この値を文字列として取得して、実行しようとしているルーチンをイベント ログに出力することはできますか? ?

重要な場合は、Kylix ではなく Windows バージョンを使用しています

4

1 に答える 1

1

デバッガーにはデバッグ情報が手元にあり、関数を検索できます。しかし、私の知る限りでは、同じ情報を時計に取り込む方法はありません。

于 2013-09-19T17:03:18.347 に答える