2010-11-26 8 views
4

私は、プロジェクトファイルのプリプロセッサ定義設定で_HAS_ITERATOR_DEBUGGING = 0を定義するいくつかのプロジェクトでVisual Studio 2008ソリューションを使用しています。しかし、これは一部のプロジェクトでのみ動作するように見えますが、イテレータのデバッグを有効にしてコンパイルされたものもあります。プロジェクト設定(時には)で_HAS_ITERATOR_DEBUGGING = 0に設定しても効果がありません

解決策のすべてのファイルを確認しましたが、プロジェクト設定以外では_HAS_ITERATOR_DEBUGGINGが定義されていません。

解決策の各stdafx.hの先頭に#define _HAS_ITERATOR_DEBUGGING 0を追加することで、この問題を回避できますが、プロジェクトプリプロセッサ定義セクションでこれを設定するのがなぜ時間がかからないのかを知りたいと思います。何か案は?

+0

私はマイケルバーの答えがそれをカバーするかもしれないと思いますが、 '_HAS_ITERATOR_DEBUGGING = 0'でビルドするといくつかのバグがあることにも注意してください(http://stackoverflow.com/questions/787288/problem-when-disabling-checked -iterers-in-vs2008-sp1-has-iterator-debugging0)を使用していました。マイクロソフトのコンパイラチームはVS2010で修正する必要があると述べた。 – birryree

+0

私はそれを無効にしなければならないという考えが嫌いですが、ほとんどの場合、このオプションはウイルスに感染しています。残念ながら、私たちの依存関係の1つは無効になっています。 –

答えて

4

今は毎回私を噛んだことがひとつあり、プロジェクトの設定が異なる構成(リリースとデバッグなど)で簡単に異なることがあります。設定がそこにあるか、または構築している設定であることを確認してください。もちろん、定義が正しいかどうかは...

問題が発生しているプロジェクトについては、ビルドログ(BuildLog.htm - ビルド出力ウィンドウに表示されるリンク)を確認し、

-D "_HAS_ITERATOR_DEBUGGING=0" 

オプションは、(実際には、コンパイラに渡されるコマンドラインオプションを持っている応答ファイル内の)コンパイラのコマンドラインで示していることを確認します。

+1

ビルドログをチェックすると、私は必要なヒントを得ました。問題は、プリプロセッサ定義がプロジェクトのほとんどすべてのファイルに対してファイルレベルで設定されているために問題が発生していたことです。ファイルレベルの設定は "no inherit"に設定されていたので、設定中のオプションは無視されていました。ビルドログには、プロジェクト設定で設定したものとは異なるコンパイラオプションが表示されていました。ありがとう! –

関連する問題