私のコードはデバッグモードで動作しますが、リリースモードでは機能しません

StackOverflow https://stackoverflow.com/questions/2923599

質問

Visual Studio 2008にC ++のコードがあり、FopenとFcloseだけのファイルで動作します。すべてがデバッグモードで完璧に機能します。そして、いくつかのデータセットでテストしました。ただし、リリースモードでは機能しません。それは常にクラッシュします。私はすべての最適化をオフにしました。また、(リンカーに)何にも依存関係がありません。また、次のように設定しました。

最適化:無効(/OD)リファレンスされていないデータを保持します。 Windows98の冗長最適化を削除しないでください:いいえ

私はまだ、これらの状況下でそれがどのように機能してはならないのか疑問に思っています。デバッグモードのように機能させるには、他に何をオフにする必要がありますか?

リリースモードで動作しますが、デバッグモードではない場合、コーディングの障害かもしれませんが、他の方法は奇妙に見えると思います。ではない?

どんな助けにも感謝しています。 - ニマ

役に立ちましたか?

解決

デバッグモードは、多くの場合、ヒープデータの割り当てを初期化します。このプログラムは、この動作に依存している可能性があります。初期化されていない変数とバッファを探します。

他のヒント

1)プリプロセッサマクロに依存するすべてのコードを再確認します。
2)プログラム状態の前提条件を検証するには、Assert()を使用します。これらは、プログラムの流れに影響を与えるとは期待していません(つまり、チェックを削除すると、コードが同じ最終結果を提供することができます)。アサートはマクロであるためです。アサートが実行されない場合は、通常の実行時間条件を使用します。
3)確かに、変数を無知の状態に置いてはいけません。

最も可能性の高い説明は、非初期化されたメモリによって引き起こされる2つのモードの異なる未定義の動作です。スレッドの安全性の欠如と同期コードの問題は、デバッグとリリースの間のタイミング環境が異なるため、この種の動作を示すこともできますが、プログラムがマルチスレッドされていない場合、明らかにこれはできません。

私はこれを経験しましたが、私の場合、それはxインデックスのみを持っていると思われる私のstructの配列の1つでしたが、この構造をチェックするループはx+1インデックスのチェックを超えていました。興味深いのは、Visual C ++ 2005を使用していたものの、デバッグモードが正常に実行されていたことです。

私はバグをキャッチするために、私のコーディングラインでprintfをラインに入れて数時間費やしました。誰でもこの種のエラーをデバッグする良い方法があります私に知らせてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top