読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Visual Studioでリリースビルドをデバッグする

Visual Studio
はじめに

Visual Studio(VC++)には、リリースビルドとデバッグビルドの2つのビルドモードがあります。開発中は、デバッグビルドでバグを取り除き、テストが終わったらリリースビルドします。

VCのリリースビルドとデバッグビルドの違い - 虎塚VCのリリースビルドとデバッグビルドの違い - 虎塚
デバッグビルドでしかステップ実行ができないものと思っていましたが、リリースビルドでもステップ実行ができることがわかりました。
この記事では、リリースビルドでステップ実行する方法を紹介します。

デバッグではじめるCプログラミング
山本 貴光
翔泳社
売り上げランキング: 405,564

リリースビルドのプロパティを変更する

ソリューションのプロパティを開き、以下の設定を行います。
1.「C++」→全般→デバッグ情報の形式で「プログラム データベース(/Zi)」を選択します。
f:id:replication:20140315113704p:plain
2.リンカ→全般→インクリメンタル リンクを有効にするで「インクリメンタル リンクを行わない(/INCREMENTAL:NO)」を選択します。
f:id:replication:20140315114035p:plain
3.リンカ→デバッグ→デバッグ情報の生成で「はい(/DEBUG)」を選択します。
f:id:replication:20140315114431p:plain
4.リンカ→最適化→参照で「参照されないデータを除去する(/OPT:REF)を選択します。また、COMDAT の圧縮で「冗長なCOMDATを削除する(/OPT:ICF)を選択します。
f:id:replication:20140315115313p:plain
これでプロパティの設定は完了です。

リリースビルドのデバッグ手順

1.リリースビルドした実行ファイルを実行します。
2.Visual Studioを起動し、ソースコード上にブレークポイントを設定します。
3.Visual Studioのデバッグメニュー→プロセスにアタッチ(P)を選択します。
f:id:replication:20140315115549p:plain
4.デバッグしたいプロセス名を選択し、「アタッチ(A)」をクリックします。
f:id:replication:20140315115743p:plain
5.ソースコードの処理が実行された場合に、ブレークポイントで実行が停止します。
f:id:replication:20140315121519p:plain

変数が参照できない

ステップ実行はできるようになりましたが、ウォッチ式で変数の値が参照できませんでした。
f:id:replication:20140315121710p:plain
リリースビルド特有のコードの最適化が実行されると、ステップ実行中の変数の参照ができないようです。
このため、ソースコード中にコードの最適化を無効にする設定を埋め込みます。

#pragma optimize("", off)

再度リリースビルドして、アタッチするとデバッグビルドと同じように変数の値を参照することができました。
f:id:replication:20140315122052p:plain