1

Windows 7の私のdelphiプログラム(.NET用ではありません)は数日間連続して実行されているようですが、プログラムはフリーズし、すべてのウィンドウが青みがかった灰色で塗りつぶされ、ウィンドウが無効になっているように見えます。プログラムを制御できなくなっただけで、プロセスを強制終了して再起動する必要があります。システム自体を再起動する必要はありません。

誰かがこれまたは同様の何かを経験しましたか?もしそうなら、あなたはそれを解決するために何をしましたか、またはそれを解決しようとしましたか?

ありがとう、

4

3 に答える 3

4

あなたの質問の文脈は非常に曖昧です。あなたのアプリケーションに関する情報はありません。その設計やアーキテクチャも含まれます。

それにもかかわらず、私の(汎用的な)提案は次のとおりです。

  • アプリケーションがマルチスレッド化されていない場合は、バックグラウンド スレッドでプロセスを実行し、GDI メッセージを処理できるようにメイン スレッドを残します。
  • アプリケーションがマルチスレッドの場合は、バックグラウンド スレッドからのすべての VCL アクセスがSynchronize呼び出しによって行われるように注意してください。
  • アプリケーションがマルチスレッドであるか、タイマーを使用している場合は、再入可能なメソッドがないことに注意してください (状況によっては、競合状態になる可能性があります)。
  • メモリ リークをハントします。
  • プログラム実行の詳細なログを使用し、発生したすべての例外をログに記録して、プログラム ハングのコンテキストを推測します (顧客側で競合状態を追跡するためにも使用される場合があります)。
  • ProcessExplorer (現在は Microsoft がホスト)という優れた無料ツールをダウンロードして、フリーズしたプログラムの状態を確認します。スレッド、CPU 使用率、メモリ、ネットワーク、ライブラリ、ハンドルに関する詳細情報が表示されます。重大なデバッグ - 特にGDI ハンドルのリークを追跡します (それらの数は安定したままにする必要があります)。
  • まだ確認していない場合は、グローバルな Windows システム イベント ログを確認してください。ここに情報が含まれている可能性があります。
  • サード パーティのコンポーネントまたはライブラリがプロセス ハングの原因である可能性があります。このハングの原因となっている可能性のあるコードの部分を分離してみてください。

Delphi アプリケーションを何ヶ月も問題なく実行しています。問題は、Delphi アーキテクチャではなく、アプリケーション コードに明確に存在します (その RTL と VCL は非常に安定しています)。

于 2011-10-27T06:03:17.010 に答える
2

青みがかったグレーの色は、おそらくデフォルトのウィンドウの色です。つまり、ウィンドウ自体がペイントされていないことを意味します。これは、プログラムが入力に応答しなくなるという他の症状と一致しています。これは、ウィンドウ メッセージを処理していないことを意味します。

デバッグする最も簡単な方法は、デバッガーでプログラムを実行することです。プログラムがハングした場合は、プログラムを停止して、どこにあるかを確認します。

メモリ リークが発生すると、最終的にプロセス空間でメモリが不足する可能性があり、プログラムがその状態に適切に応答しない可能性があります。タスク マネージャーをチェックして、使用しているメモリの量を確認します。

于 2011-10-26T19:34:00.010 に答える