Debug構成とRelease構成の違い

ビルド構成の Debug と Release の違いについて調べてみました。


開発中だから Debug 構成、リリースする時は Release 構成という 固定観念 ではなくて、開発中とリリース時での動作に一切の違いがあってはいけないから安全に動作することを最優先にリリースする際も Debug構成で行く!という選択肢もあっても良いと思います。パフォーマンスが気になるアプリでは説得が難しいと思いますが、そもそも Debug 構成で性能要件が満たせないようなら設計レベルから見直すべきだとは思います。Release 構成による最適化のパフォーマンス向上は、最後の切り札くらいに考えても良いのではないでしょうか。


というわけで、以下が Debug 構成と Release 構成の違いです。


Debug
条件付きコンパイルの定数:DEBUG,TRACE
コードの最適化:ON
デバッグ情報:FULL


Release
条件付きコンパイルの定数:TRACE
コードの最適化:OFF
デバッグ情報:pdb-only


コードの最適化は、ILコードの最適化 及び JITコンパイラによるネイティブコードの最適化も含まれます。コードの最適化がOFFの場合はILコード・ネイティブコード共に最適化されません。また、Visual Studio によるエディットコンティニューをサポートするためのNOP(何もしない命令)が含まれます。


デバッグ情報はデバッガの動作やログに出力するスタックトレース情報に影響する。指定できる値は次の3つがあります。


None:デバッグ情報なし
pdb-only:ローカル変数の検出
full:ILコードとネイティブコードの完全なマッピング、デバッガにてデバッグが可能


勘違いしやすい事ですが Debug 構成、Release 構成というのは一連のコマンドラインオプション構成に付けられた名称です。 Debug 構成だけれど 最適化:ON、デバッグ情報無しという設定も行えます。そのためリリースする際は、それぞれのコンパイルオプションを再度確認する必要があります。