2012-02-23 13 views
0

私は今、非常に特殊な問題に取り組んでいます。私はMSVC環境から実行するか、ビルドされた実行可能ファイルを自分自身で起動するにしても、Debug-Buildmodeで完全に動作するアプリケーションを持っています。 Release-Buildmodeでこのアプリケーションをビルドすると、MSVC環境から実行すると完全に機能しますが、自分で起動すると予期しない動作が発生します。MSVC++デバッグとリリース環境の相違点

デバッグモードとリリースモードの違いは、この現象の原因となる可能性があります。また、手動で実行可能ファイルを開始すると問題が発生するのはなぜですか?

非常に大きなプロジェクトであり、問​​題の原因となる可能性のあるものが全くないので、コードを付けるのは難しいです。プログラムの流れは基本的にあります。ファイルから

  • 読むの設定(ない問題は、二重の読み取り値をチェックし、ini-とlibconfig ++を使用 - 確かにライブラリを)
  • クラスを区切るための値を配布します(二重の私がかもしれないと想像

何かが(リリースビルドを手動で実行した場合、これらはトリガされません)これらのクラスの一つは、スレッド(boost::thread)を開始し、特定のイベントにコールバック関数をトリガし、渡された値)

  • をチェックします問題を引き起こし、しかし、私はわからない:クラスが異なる人々によって書かれていたので

    • std::stringstd::wstringの使用の間に矛盾があります。私はstd::wstring(s.begin(), s.end())を使用して1つから別のものに変換しています。

    これが私の問題の原因である可能性があります。はいの場合、どのように問題を解決できますか?私は本当にこれについていくつかの助けに感謝します。前もって感謝します。

    更新:

    • プログラムがクラッシュしないと変数は、私が(デバッガのすべてがうまくうまくいく中であるため)悪名高いプリントデバッグ方法を使用する場合
    • 異なる値を持っていないようです私はunitialized変数がこの問題を引き起こしている可能性があり、私が使用するすべての変数を3回チェックして、すべての変数が適切に初期化されていることを読んだ。
    • ユニットテストでは、私が使用しているモジュールはすべて期待通りに機能する私はhavvので、毎回国境のケースすべてのモジュールは自分で書かれていません)。

    アップデート2:

    • ステップによって最適化ステップを無効にし、近い私は、問題を絞り込むことができたデバッグbuildmodeにリリースbuildmodeをもたらしながら:**コード生成]タブで、私のプログラムは、で動作し、Multithreaded-DLLではなく、最適化設定に関係します。

    これは素晴らしい成果だと思われますが、私はこの問題の理解が不足しています。

  • +0

    何が問題なのですか?プログラムはクラッシュしますか?これらのイベントをトリガーするコードを見つけようとしましたか?完全に文字列の不一致を修正しましたか? –

    +0

    これはしばしば、プログラムの起動方法によって異なる乱数値を取得する初期化されていない変数です。 –

    +0

    @Bojan Komazec "完全に文字列が矛盾する"とはどういう意味ですか?上記のように、std :: stringをstd :: wstringに数回変換する必要があります。 – nijansen

    答えて

    1

    ロギングを追加するか、いくつかのコードブロックを削除します。これにより、問題の発生場所を見つけることができます。違いのためにここを見て:

    What is the difference between Debug and Release in Visual Studio?

    +0

    私はロギングを実装しましたが、残念ながら問題がどこにあるのかまだ分かりませんでした。私はあなたが今薦めるようにすべてを取り除こうとします。 Debug/Releaseの相違点を見ると、アプリケーションが(MSVCデバッガ内ではなく)手動で実行された場合にのみ問題が発生するのではないかと思います。それは最適化によっても引き起こされる可能性がありますか? – nijansen

    +0

    あなたの問題の原因は何も分かりません。ロギングを使用する場合は、バイナリ検索ルールを使用してください。コードの途中でロギングを追加し、それが表示されるかどうかを確認してください。また、リリースプロジェクトにデバッグ情報を追加してデバッガから起動し、最適化を無効にすることもできます。 – marcinj

    1

    デバッグは、exeファイルのサイズが異なっている理由ですリリースモードでの最適化がある最適化を使用しないでください。また、使用されるライブラリーは、同じコードのものであっても異なっています。最適化オプションをオフにしてデバッグのようなリリースを行うことができます。