解決に苦労している特定の状況でのみ発生する奇妙な断続的なクラッシュがあり、それに対処する方法について SO のアドバイスを求めています。
不具合
明らかにランダムな時点で、Windows は「[アプリ] が動作を停止しました」というダイアログを表示します。これは、ntdll.dll の APPCRASH、例外コード 4000001f、例外オフセット 000a2562 です。ここで注意が必要です。これは、アプリケーションをデバッガーで実行している場合にのみ発生します。ただし、デバッガーはこの例外をキャッチせず、Windows がこのダイアログを表示する時点で、IDE は応答していません。このバグは、通常の実行中、つまり IDE デバッガ内以外では発生しません。
デバッガーの外で再現できないため、プログラムを実行して、既にクラッシュしているときにアタッチすることはできません。IDE が応答していないため、Windows がこのダイアログを表示したときに実行を一時停止できません。コード行を手動でトレースして、それが発生した場所を確認できます。いくつかあり、発生する場所は明らかにランダムです。しばらくの間、ウィンドウ(または新しいフォーム)を表示するときに、スレッドを作成するときにしばらく発生しました。
編集: IDE まで追跡しました: ブレークポイントで一時停止して[スレッド ステータス] タブをクリックすると、理論的には一時停止していても、プログラムは上記のダイアログですぐにクラッシュします。この状況では、IDE は応答し続けます。これは本当に奇妙です。
詳しくは
開発環境をVMWare Fusionに移動しました。このバグは、新しいコンピューターで古い (ネイティブ Windows) コンピューターからのビルドを実行するときにも発生します。その古いコンピューターの同じ EXE ファイルでは発生しませんでした。これは、Fusion に関連しているのか、新しいセットアップの何かに関連しているのか疑問に思います。
私は走っています:
- OSX Lion 10.7.1 上の WMWare Fusion 3.1.3 上の Windows 7 Pro x64、すべて完全に更新。Fusion が画面の 1 つで「フル スクリーン」モードで実行されています。
- Windows 7 を (VM ではなく) ネイティブに実行している同僚は、この問題に遭遇しません。古いVistaコンピュータでもそうしませんでした。
- Embarcadero RAD Studio 2010、完全に更新されました (5 つの更新があり、すべてを順番に取得するのは難しいと思います)。DDevExtensions 2.4.1 がインストールされており、最新の IDE フィックスパックもインストールされています。これらの両方をアンインストールしても効果はありません。
- アプリケーションは、Delphi のスニペットを使用して、ほとんどが C++ で記述されています。32ビットです。
- EurekaLogを使用しますが、例外もキャッチされません。(通常、例外は最初にデバッガーによってキャッチされ、次に EurekaLog によってキャッチされます。)
- デバッグ ビルド (EurekaLog なし、追加のデバッグ情報など、デバッグ DCU を true に設定) を実行しても、それが再現されます。ただし、C++Builder プロジェクト設定ダイアログの [Delphi リンク] ページにある [DCU のデバッグ] オプションは効果がないようです。VCL コードにステップ インして、実際にエラーをトリガーする行を見つけることができません。
- Codeguard (メモリ アクセス エラー、二重解放、解放されたメモリへのアクセス、バッファ オーバーランなどを検出します) は何も報告しません。