ユニットのファイナライズ セクションに問題があり、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 バージョンを使用しています