はじめに
Visual Studio(VC++)には、リリースビルドとデバッグビルドの2つのビルドモードがあります。開発中は、デバッグビルドでバグを取り除き、テストが終わったらリリースビルドします。
デバッグビルドでしかステップ実行ができないものと思っていましたが、リリースビルドでもステップ実行ができることがわかりました。この記事では、リリースビルドでステップ実行する方法を紹介します。
リリースビルドのプロパティを変更する
ソリューションのプロパティを開き、以下の設定を行います。
1.「C++」→全般→デバッグ情報の形式で「プログラム データベース(/Zi)」を選択します。
2.リンカ→全般→インクリメンタル リンクを有効にするで「インクリメンタル リンクを行わない(/INCREMENTAL:NO)」を選択します。
3.リンカ→デバッグ→デバッグ情報の生成で「はい(/DEBUG)」を選択します。
4.リンカ→最適化→参照で「参照されないデータを除去する(/OPT:REF)を選択します。また、COMDAT の圧縮で「冗長なCOMDATを削除する(/OPT:ICF)を選択します。
これでプロパティの設定は完了です。
リリースビルドのデバッグ手順
1.リリースビルドした実行ファイルを実行します。
2.Visual Studioを起動し、ソースコード上にブレークポイントを設定します。
3.Visual Studioのデバッグメニュー→プロセスにアタッチ(P)を選択します。
4.デバッグしたいプロセス名を選択し、「アタッチ(A)」をクリックします。
5.ソースコードの処理が実行された場合に、ブレークポイントで実行が停止します。
変数が参照できない
ステップ実行はできるようになりましたが、ウォッチ式で変数の値が参照できませんでした。
リリースビルド特有のコードの最適化が実行されると、ステップ実行中の変数の参照ができないようです。
このため、ソースコード中にコードの最適化を無効にする設定を埋め込みます。
#pragma optimize("", off)
再度リリースビルドして、アタッチするとデバッグビルドと同じように変数の値を参照することができました。