私は診断できなかった奇妙な問題を抱えており、誰かが少なくとも私を正しい方向に向けることができることを望んでいます。さまざまなソースからデータを収集して画面に表示するC++MFCアプリケーションがあります。ただし、ランダムな間隔(通常は約5〜10分)が経過すると、下の画像に示すように、表示が「破損」し、これまで見たことのない、または追跡できなくなります(左は正常、右は破損) )::
基本的な症状は次のとおりです。
- 上/下矢印の画像が「5」と「6」に変わります。
- コンボボックスリストを開くと、アイテムのテキストだけが表示されます(リストの境界線とスクロールバーは表示されません)。
- 一部のコントロールの背景色は、正しく更新または表示されません。
- Zオーダーが壊れており、アプリは上部に配置された他のウィンドウからの「リーク」を制御します。
- アプリにフォーカスがある状態でPrint-Screenを押すと、ウィンドウがクリップボードにキャプチャされなくなります。
- ウィンドウを閉じて再度開くと、何も起こりません。
- アプリケーションを再起動すると、通常の状態に戻ります。
考えられる原因として私が排除しようとしたことは次のとおりです。
- オペレーティングシステムとコンピューター:同じ問題が、Windows7-64ビットからWindowsXp-32ビットまでのさまざまなシステムに存在します。
- マルチスレッド:表示の更新が同時に発生しないようにミューテックスを追加しましたが、効果はありませんでした(予想どおり)。
- メモリの破損:これはずっと私の仮定でしたが、メモリの破損の兆候はまったくありません。基本表示コードは、基本ネットワークメッセージライブラリと同様に、同様の問題なしで何年も使用されています。
- 特定のコード:問題を示さない他のさまざまなダイアログの中で、問題を1つの特定のダイアログに絞り込みました。それらはすべて同じベースコードを使用しており、問題がダイアログの特定の表示コードにあることを示しているようです。問題が発生する正確な方法または理由は、これまでのところわかりませんでした。
原因が何であるか、またはそれをどのように絞り込むかについてのアイデアは素晴らしいでしょう。
更新1: タイミング/繰り返し可能なテストをさらに実行すると、この1つのダイアログをしばらく実行したままにしておくと問題が発生するようです。問題が発生するまでの時間は、一貫して300〜400秒です。