あなたの質問はかなり漠然としています。使用しているさまざまなコンポーネントのどれを非難したいのかわからない場合、それを修正する見込みはありません. 最も可能性が高いのは、何か間違ったことをしている、またはこれらのコンポーネントがどのように機能するかを理解していないことです。それが純粋にコンポーネント自体のバグであるとはとても思えませんが、いずれにせよ、何が問題なのかを見つけ、それを修正するのはあなたの仕事です。
作成したデッドロック、または発生している深刻なプロセス破損の問題により、MadExcept が情報を提供できない場合がありますが、試してみる価値があります。
どれがフリーズしているかを確認するには、madexcept コメントがこれまでで最高の提案です。(設定可能な秒数の後に) タイムアウトになり、人為的な例外が発生して、ハングしたプロセスが中断されます。これは、ユーザー コード、および Win32 またはカーネル関数でスレッドがブロックされている場所で機能します。たとえば、最近の Indy 10 のデフォルトである無限のタイムアウト用に Indy を設定している可能性があります。また、タイムアウトに関連するフリーズが発生している可能性があります。ネットワーク アクティビティが完了すると予想していたが、決して完了しませんでした。プログラムが「ハング」する原因となります。ここでの解決策は、タイムアウトを変更することです。
ただし、問題がどこにあるのかを把握するまで、修正できるとは思えません。そのためにも、マーカスの言うとおりです。madExcept を調べる必要があります。私はそれなしでは生きていけない。
次に、トレース ロジックをプログラムに実際に追加する必要があります。これにより、問題が発生する直前に、プログラムがどこに行き、何をしていたかがわかります。そのために本当に助けが必要な場合は、Raize の CodeSite を試すことができます。個人的にはOutputDebugString
、無料の MicrosoftDebugView
ユーティリティ (以前は SysInternals から提供されていた) ツールと組み合わせると、クライアント コンピューターでこのような問題をデバッグするのに十分であることがわかりました。
トレース ログを記録しないバックグラウンド スレッドを持つプログラムは、設計が不適切なプログラムです。失敗したり問題が発生したりする可能性のある重要なシングル スレッド アプリケーションには、トレース ログが必要です。
MadExcept やその他の例外ツールが役に立たない場合でも、ロギングは常に役に立ちます。CodeSite も非常に人気がありますが、Trace-Logging は通常、独自のソリューションです。