32ビットWindowsコマンドラインプログラムを開発する際に、デバッグバージョンが期待通りに動作していて、ない。今、これは20年以上前の珍しい問題ではありませんでした。リリース版では、コンパイラの最適化が有効になり、現在でもコンパイラの最適化がすべてのケースで有効であるとは限りません。したがって、過去にこの問題が発生した場合は、コンパイラの最適化をオフにします。今回はすべての最適化を無効にし、問題は残っていました。デバッグバージョンとリリースバージョンの唯一の違いは、一連のコンパイラとローダーの設定になります。私たちは戻って、リリース設定をデバッグ設定と一致するように変更しました。問題は残りました。私たちはこれまで一度も見たことがない。MS Visual C++リリースとデバッグビルドの動作が異なる可能性があります
これは、すべて32ビットWindows用に一般的に使用されているVC6プラットフォーム上にあります。それは正しいMicrosoft Visual C++ 6.0です。 VC6に対する私たちの好みは、VC6までのC/C++パッケージのすべてのバージョンでMicrosoftのベータテスターであり、オプティマイザのデバッグに非常に積極的でした。しかし、VC8には本当の問題はなかったので、私たちはそれを試みました。この場合は、私たちが使用していたプロジェクトをVC8に変換するだけでした。私の驚いたことに、私はVC8がまったく同じ問題を抱えていることを発見しました。デバッグバージョンは動作し、リリースバージョンは動作しません。私たちはVC8の中から最初から作り出すことを試みるかもしれませんし、それが違いを生むかどうかを見てみましょう。この時点では、これはまったく理解できません。私たちが紛失している場所にコンパイラスイッチを設定する必要があります。それとも?
ほかに、リリースとデバッグビルドの違いは何ですか?
デバッグとリリースのビルドの動作が異なると、初期化されていないメモリまたは変数をどこかで使用していることを示すサインになる可能性があります。 –
私はVCがリリースではなくデバッグでいくつかの余分なスタックスペースを割り当てているのを見ました。おそらく、スタックで割り当てられた配列のいくつかの境界から外れて、おそらくリリースで現れます。これは、アセンブラを調べることで確認できます。 –
@Paul Ogilvie観測のおかげで、それを見ていきます。 –