私はクライアントと一緒に現場で働いており、複雑な問題で彼らを助けようとしています. Delphi に、内部の仕組みを調べて問題を特定するのに役立つツールまたは機能があることを願っています。
ここでは、私たちが扱っている問題の概要を説明します。これは、現在 Delphi 5 にデプロイされている商用アプリケーションです。この 1 年間で、アプリケーションは Delphi XE に移行されました。移行はほぼ完了していますが、いくつかの重大なエラーが発生しています。
アプリケーション自体は非常に大きく、数百のユニットと多くのサードパーティおよびカスタム コンポーネントが含まれています。私たちが直面している特定の状況では、メイン フォームが作成され、そのメイン フォームが表示される前にアプリケーションが終了します。その結果、ユニットがファイナライズされているため、この終了中にクラッシュが発生します。
デバッガーは、NotifyNonDelphiException によって呼び出される kernel32 の RaiseException 関数で中断しています。NotifyNonDelphiException 内からコール スタックをログに記録する非中断ブレークポイントを設定しようとしましたが、何も役に立ちません。コール スタックには、例外を処理したメソッド、つまり RtlRaiseStatus と KUserExceptionDispatcher のみが含まれます。
NotifyNonDelphiException によって処理されている元の例外をスローするコードを特定するにはどうすればよいでしょうか。
編集: これは、例外の 1 つのインスタンスに続いてキャプチャされた 2 つの画像です。1 つ目は発生した例外で、2 つ目は例外ダイアログ ボックスが閉じられた後の CPU ウィンドウを示しています。
新しい編集:
この質問を投稿してから 1 週間以上経ちましたが、さまざまな回答に感銘を受けました。最初の質問に対するコメントのいくつかは最も価値がありましたが、回答自体のいくつかは非常に有益です。
そのクライアントへの私の訪問は終わりました。ここに投稿された回答を検討するよう依頼します。エラーの実際の原因を突き止めることはできませんでしたが、エラーの原因は明らかでした。深刻なリファクタリングを行わずに何年にもわたってユーザー インターフェイスを微調整した結果、アプリケーションのログイン プロセスが不安定になりました。ログインがユーザーによってキャンセルされたとき、メイン フォームは部分的に初期化された状態でした。このプロセスの実行が許可されなかった場合 (ユーザーがログインを中止した場合)、ファイナライズに関する非常に深刻な問題が発生していました。
同社は、将来の問題を特定するために AQTime Pro を購入しましたが、ログイン プロセスのリファクタリングが必要であり、長期的には問題を解決します。
ある時点でこの質問を削除することを検討しましたが、他の人が投稿された多くの優れた提案が参考になると信じているため、投稿し続けることにしました.
質問に答えがないまま放置するのは嫌なので、当面は@Delticsの回答を受け付けます。ただし、この質問の視聴者には、他のすべての回答とコメントも考慮するようお願いしています。それらは等しく価値があります。