2011-09-22 9 views
7

私が扱っているゲームエンジンは、デバッグビルドでは遅すぎるため、ゲームをデバッグすることはできません。私が望むことの1つは、コンパイラが小さな関数(特にVector/Matrixクラスとコンテナクラス)をインライン化することです。これは、デバッグビルドでゲームをスピードアップすることも、しないこともあります。プロファイリングを頻繁にしてボトルネックを突き止める前に、私は最小限の作業をしなければならないので、まずこれを試してみると思っていました。デバッグビルドのインライン関数

したがって、デバッグビルドでインライン関数にVisual C++コンパイラを取得する方法はありますか?プロジェクトがそのようにデバッグモードでコンパイルされたときに

答えて

5

プロジェクトオプション - > C/C++ - >最適化 - >インライン関数展開。これを/Ob2にします。デバッグ設定でこれを行います。

リリースでは、インライン関数展開は他の最適化設定によって暗示されます。したがって、デフォルトではすべての設定が設定に対して「デフォルト」となっていますが、動作は実際は異なります。

私は、デバッグビルドはリリースと同じインライン展開動作を持つ必要があります。本当にない理由はありません。

http://msdn.microsoft.com/en-us/library/47238hez.aspx

+0

答えをありがとう、私は時間を見つけたらすぐにこれをチェックし、答えにチェックマークを付けます。 – Samaursa

+0

これは、VSヘルプファイルには、デバッグビルドでは機能しないことが示されていないので、これを正確にチェックしました(サポートされていないコンパイラフラグのコンパイラ警告もありません)。私は、リリースでそうすることはできませんが、最も単純な1行の関数に壊れてしまいます。アセンブリを見ない限り、インライン展開されているかどうかはわかりません。 – Samaursa

+0

これは、デバッガを "混乱"させる原因になりますか? – paulm

-1

DEBUGは、Visual Studioによって定義されます。

#ifdef DEBUG 
    inline void fn() { 
#else 
    void fn() { 
#endif 
+0

デバッグ時に 'inline'キーワードがコンパイラによって完全に無視される – Samaursa

0

あなたが__forceinlineを試みる場合があります。そのページでデバッグビルドについて読むことを忘れないでください(/Ob0オプションをオフにしてください)。

私の疑惑は、これがパフォーマンスを大きく変えないということです。まだリリースビルドにシンボルを追加していない場合に試してみてください。多くの問題をデバッグするのにかなりうまく機能します。

0

次の2つのコンパイラオプションを混乱しています。 /Oインライン化を含む最適化の影響。 /ZIは、デバッグ用のPDBファイルを作成します。それらは独立して設定することができます。

「デバッグ」構成を複製し、/O1/ZIの両方を持つ「デバッグ最適化」構成を作成すると便利です。

+0

これは可能ですが、最適化をオンにすると、あまりにも多くのものが最適化されます。たとえば、ほとんどの場合、文字列をデバッグ情報の最適化とデバッグ情報とともに正しくデバッグすることはできません。デバッガは、デバッグ情報があっても、最適化された多くのローカル変数の値を表示できません。 – Samaursa

関連する問題