助けてください!私は本当に頭が痛いです。私のプログラムは、ちょっとした個人的なノート マネージャーです (Google で「cintanotes」を検索)。一部のコンピューター (もちろん私は所有していません) では、起動直後に未処理の例外でクラッシュします。AMD CPU を搭載する傾向があることを除けば、これらのコンピューターについて特別なことは何も言えません。
環境: Windows XP、Visual C++ 2005/2008、raw WinApi。
この「Heisenbug」について確かなことは次のとおりです。
1) クラッシュはリリース バージョンでのみ発生します。
2) GDI 関連のものをすべて削除すると、クラッシュはすぐになくなります。
3) BoundChecker には文句はありません。
4) ログを書くと、ローカルの int 変数の宣言でクラッシュが発生したことがわかります! それはどうしてですか?メモリの破損?
どんなアイデアでも大歓迎です!
更新: 「障害のある」PC でアプリをデバッグすることができました。結果:
「CintaNotes.exe の 0x0044a26a で未処理の例外: 0xC000001D: 不正な命令。」
そしてコードが壊れる
0044A26A cvtsi2sd xmm1,dword ptr [esp+14h]
したがって、問題は「コード生成/拡張命令セットを有効にする」コンパイラオプションにあったようです。「/arch:SSE2」に設定され、SSE2 をサポートしていないマシンでクラッシュしていました。このオプションを「未設定」に設定したところ、バグはなくなりました。ふぅ!
助けてくれてありがとう!