Visual Studio のデバッグの概要

Visual Studio は、プロジェクトのビルドとデバッグ ツールの強力な統合セットを提供します。 このトピックでは、デバッグ UI 機能の最も基本的なセットの使用を開始する方法が説明されます。

注: より高度な機能およびプラットフォーム固有のトピックまたは機能固有のトピックへのリンクがこのページの下部にあります。

コードが機能しません。 Visual Studio の助けが必要です。

エディターを見つけ、コードをいくらか作成しました。 これから、そのコードのデバッグを開始します。 ほとんどの IDE と同じように、Visual Studio には、2 つのデバッグ フェーズがあります。1 つは、コードをビルドして、プロジェクト エラーとコンパイラ エラーをキャッチして解決するフェーズです。もう 1 つは、環境でそのコードを実行し、実行時エラーと動的エラーをキャッチして解決するフェーズです。

ビルドの構成

ビルドの構成には、デバッグリリース の 2 つの基本的な種類があります。 最初の構成では、より低速で大きな実行可能ファイルが生成されます。対話型の実行時デバッグ機能はより豊富ですが、これが出荷されることはありません。 2 つ目のビルドはより高速で、より最適化された実行可能ファイルです。(少なくともコンパイラの観点から) このビルドが出荷に適しています。

既定のビルド構成は、デバッグです。

Visual Studio の [デバッグ ビルド] ボタン

対象となる特定のビルド プラットフォームを指定することもできます。たとえば、x86 (32 ビット Intel CPUs)、x64 (64 ビット Intel CPU)、ARM (特定の種類のアプリでのみサポートされる ARM CPU) などです。 マネージ プロジェクトとネイティブ プロジェクトの既定値は x86 です。 これを変更するには、ビルド プラットフォームのドロップダウンをクリックし、異なるプラットフォームか [構成マネージャー] を選択します。

Visual Studio の構成ファイル マネージャー ウィンドウ

構成マネージャーを使用して、対象のビルド構成を指定できます。 これを起動し、[構成] ドロップダウンか [CPU] ドロップダウンをクリックし、[新規作成] を選択して、新しいビルドまたはプラットフォームを作成します。

Visual Studio の構成マネージャー ウィンドウ

開始時には、ビルド構成、プラットフォームとしてデバッグx86 だけを使用してください。 コーディングとデバッグが完了したら、構成をリリースに変更し、特定のプラットフォームを対象にします。 (以前のバージョンの Visual Studio では、AnyCPU が .Net コード プロジェクトの既定のプラットフォームとして提供されていました。)

注: プロジェクトをビルドする際、実行可能ファイルを格納するために作成されるプロジェクト ディレクトリ パスを判断するために構成の値とプラットフォームの値も使用されます。 通常、これは <path-to-project>\\\ です。 たとえば、構成が Debug で、プラットフォームが x86 のプロジェクトの場合、Projects\MyProjectNameHere\MyProjectNameHere\bin\Debug\x86 の下で見つかります。 これは、ビルドされたこれらの実行可能ファイルを管理する独自のツールやスクリプトがある場合に役立ちます。

コードのビルド

ビルドを構成すると、実際にプロジェクトのビルドを開始できます。 最も簡単な方法は F7 を押す方法ですが、メイン メニューから [ビルド]、[ソリューションのビルド] の順に選択してビルドを開始することもできます。

Visual Studio ビルド プロジェクト メニューの選択

ビルド プロセスは、Visual Studio UI の下部にある [出力] 状況ウィンドウで監視できます。 エラー、警告、ビルド操作がここに表示されます。 エラーがあると (または構成されたレベルより上の警告があると)、ビルドは失敗します。 エラーと警告をクリックすると、それが発生した行に移動できます。 F7 をもう一度押すか (エラーがあるファイルのみを再コンパイルする場合)、Ctrl + Alt + F7 を押してプロジェクトを再ビルドします (クリーンかつ完全な再ビルドの場合)。

エディターの下の結果ウィンドウに 2 つのビルド用のタブ付きウィンドウが表示されます。1 つは [出力] ウィンドウで、このウィンドウには生のコンパイラの出力が表示されます (エラー メッセージを含む)。もう 1 つは [エラー一覧] ウィンドウで、このウィンドウにはすべてのエラーと警告の、ソートおよびフィルターが可能な一覧が表示されます。

成功すると、[出力] ウィンドウに次のような結果が表示されます。

Visual Studio の成功したビルドの出力

エラー一覧のレビュー

前にコンパイルが成功したコードに変更を加えた場合、エラーが出ることが少なくありません。 コーディングに不慣れな場合には、その可能性が高くなります。 エラーは、単純な構文エラーや変数名の間違いのように分かりやすい場合もあれば、手引きとして暗号のようなコードしかないような分かりにくい場合もあります。 問題を見やすくするには、[出力] ウィンドウの下部に移動し、[エラー一覧] タブをクリックします。 これにより、プロジェクトのエラーと警告がより整理されて見やすくなり、いくつかの追加オプションも表示されます。

Visual Studio の出力とエラーの一覧

[エラー一覧] ウィンドウのエラー行をクリックし、エラーが発生した行にジャンプします。 (右上の [クイック起動] バーをクリックし、そこに "行番号" を入力し、Enter キーを押して、行番号をオンにします。 これは、[オプション] ウィンドウ エントリを表示する最も簡単な方法です。そのウィンドウで行番号をオンにすることができます。 [クイック起動] バーの使用について学ぶと、UI をクリックする回数を減らすことができます。)

Visual Studio の行番号を含むエディター

Visual Studio の行番号オプション

Ctrl + G を押すと、エラーが発生した行番号にすぐにジャンプします。

エラーは、赤い "波線" の下線によって示されます。 その上に移動すると、追加の詳細が表示されます。 修正を加え (これによって新たなエラーが入り込む可能性はあります)、別の場所に移動します。 (これを "回帰" と呼びます。)

Visual Studio のエラー ホバー

エラー一覧を確認し、コード内のすべてのエラーを解決します。

Visual Studio の [デバッグ エラー] ウィンドウ

エラーの詳細のレビュー

コンパイラの観点からすると、多くのエラーはあまり意味がない可能性があります。 その場合、追加情報が必要です。 [エラー一覧] ウィンドウから、対応する入力行を右クリックし、コンテキスト メニューから [エラーのヘルプを表示] 選択することで、Bing の自動検索を実行して、エラー (または警告) に関する詳細を入手することができます。

Visual Studio のエラー一覧の Bing 検索

これにより、エラー コードとテキストの Bing 検索の結果をホストするタブが Visual Studio 内で起動します。 インターネット上の異なるさまざまなソースからの結果を入手できますが、すべてが役立つ情報であるとは限りません。

[エラー一覧][コード] 列のハイパーリンク付きのエラー コード値をクリックすることもできます。 これにより、エラー コードだけを探す Bing 検索が起動します。

静的コード分析の実行

"静的コード分析" とは、"コード管理における実行時エラーまたは問題の発生原因となり得る一般的な問題を探して自動的にコードをチェックすること" のしゃれた言い方です。 ビルドの妨げとなる明らかなエラーをクリーンアップした後に静的コード分析を実行することを習慣づけてください。それによって生成される可能性がある警告に対処するための時間を取ってください。 将来の頭痛の種を取り除き、コード スタイルの手法をいくらか学ぶことになります。

Alt+F11 を押して (または、上部のメニューから [分析]、[ソリューションでコード分析を実行] の順に選択して) 静的コード分析を開始します。 多くのコードがある場合は時間がかかる可能性があります。

Visual Studio Code 分析メニュー項目

新しい警告または更新された警告があれば、IDE 下部の [エラー一覧] タブに表示されます。 警告をクリックして、その警告にジャンプします。

Visual Studio の警告を含むエラーの一覧

警告は、赤色の波線ではなく、明るい黄緑色の波線で示されます。 その警告の上に移動すると詳細が表示されます。右クリックすると、コンテキスト メニューが表示され、修正やリファクタリング オプションを支援します。

Visual Studio Code 分析の警告ホバー

電球を使用したコードの修正またはリファクタリング

電球は、Visual Studio の新しい機能です。電球を使用すると、コード インラインをリファクタリングできます。 これは、一般的な警告を迅速かつ効率的に修正する簡単な方法です。 電球にアクセスするには、警告の波線を右クリックします (あるいは、波線の上にいる間に Ctrl + を押します)。 その後、[クイック操作] を選択します。

Visual Studio 電球クイック オプション

そのコード行に適用できる修正またはリファクタの一覧が表示されます。

Visual Studio 電球プレビュー

電球は、コード アナライザーが、コードの修正、リファクタリング、改善の機会があると判断したときはいつでも使用できます。 任意のコード行をクリックし、右クリックしてコンテキスト メニューを開き、[クイック オプション] を選択します (あるいは、効率的な方法としては、Ctrl + を押します)。 領域リファクタリングまたは改善のオプションが使用可能な場合、そのオプションが表示されます。使用可能でない場合、「No quick options available here」というメッセージが IDE の左下隅のベゼルに表示されます。

Visual Studio 電球 'オプションなし' text

慣れてくれば、矢印キーと Ctrl + で簡単に操作できます。 を使用して、クイック オプションのリファクタリング機会をチェックし、コードをクリーンアップできます。

電球の詳細については、「電球を使ってクイック操作をする」を参照してください。

実行されているコードのデバッグ

これでコードが正常にビルドされ、クリーンアップが実行されたので、次に、F5 キーを押すか [デバッグ]、[デバッグの開始] の順に選択してコードを実行します。 これにより、デバッグ環境でアプリが開始され、その動作を詳しく監視できるようになります。 Visual Studio IDE は、アプリの実行中に変更されます。[出力] ウィンドウは、2 つの新しいウィンドウに置き換えられます (既定のウィンドウ構成)。その 1 つは [自動変数/ローカル/モジュール/ウォッチ] タブ付きウィンドウで、もう 1 つは [呼び出し履歴/ブレークポイント/例外設定/出力] タブ付きウィンドウです。 これらのウィンドウには複数のタブがあり、そのタブでアプリの変数、スレッド、呼び出し履歴、その他さまざまな動作を実行と同時に調べ、評価することができます。

Visual Studio の自動変数ウィンドウと呼び出し履歴ウィンドウ

さまざまなアプリで操作を試し、変更を確認してください。 異常が表示された場合は、Ctrl + Alt + Break を押してアプリを一時停止してください (あるいは、[一時停止] ボタンをクリックしてください)。

Visual Studio の [すべて中断] ボタン

F5 を押し、アプリの実行を続行します (または [続行] ボタンをクリックします)。

Visual Studio の [デバッグの続行] ボタン

Shift+F5 を押すか、[停止] ボタンをクリックすると、アプリを一時停止できます。 あるいは、単にアプリのメイン ウィンドウを閉じます (またはコマンド ライン ダイアログ)。

コードが完璧に、予想通りに実行されれば、成功です。 ビルド構成を [リリース] に変更し、配置のために再ビルドします。 (プロであれば、単体テストにジャンプすることもできます。)ただし、ハングまたはクラッシュする場合、あるいは予期しない結果になる場合、問題の原因を見つけ、バグを修正する必要があります。

単純なブレークポイントの設定

ブレークポイントは、信頼できるデバッグの最も基本的で重要な機能です。 ブレークポイントは、Visual Studio が実行コードを中断する場所を示します。これにより、変数の値またはメモリの動作を確認したり、コードの分岐が実行されるかどうかを確認したりすることができます。 ブレークポイントを設定して削除した後、プロジェクトを再ビルドする必要はありません。

中断させたい場所の行の外側の余白をクリックし、コードの行を選択し、F9 を押して、ブレークポイントを設定します。 コードを実行すると、このコードの行の指示が実行される前に停止します。

Visual Studio ブレークポイント

コードが中断すると、コードのマークの付いた行はまだ実行されません。 この時点で、ブレークポイントによってマークが付けられているコードの行の指示を実行し、変更された値を確認することもできます。 これを、コードの "ステップ イン" と呼びます。 マークされているコードがメソッド呼び出しの場合、F11 キーを押してステップ インすることができます。 F10 キーを押して、コードの行を "ステップ オーバー" することもできます。 コード ステップ実行の詳細については、「デバッガーでのコード間の移動」 を参照してください。

ブレークポイントの一般的な使用は、次のとおりです。

  1. クラッシュまたはハングの原因を絞り込み、失敗の原因になっていると思われるメソッド呼び出しのコード全体またはその周辺に散布する。 コードをステップ実行しながら、問題の原因になっているコードの行が見つかるまで、そこに近づくよう、コードのブレークポイントを削除してリセットしていきます。

  2. 新しいコードを導入する際、その先頭にブレークポイントを設定し、コードをステップ実行し、予想どおり動作するかを確かめます。

  3. 複雑な動作を実装している場合は、プログラムが中断したときに変数の値やデータを調べることができるよう、アルゴリズムのコードに対してブレークポイントを設定します。

  4. C または C++ コードを作成している場合、ブレークポイントを使用してコードを停止します。これにより、メモリに関連した障害をデバッグするときに、アドレス値 (NULL の検索) および参照カウントを調べることができます。

    ブレークポイントの詳細については、「ブレークポイントの使用」を参照してください。

条件付きブレークポイントの設定

ループまたは再帰処理の中にブレークポイントがある場合、または頻繁にステップ実行するブレークポイントが多数ある場合、条件付きブレークポイントを使用して、特定の条件が満たされる場合のみコードが中断するようにしてください。 そうしないと、F11 キーをひたすら押し続けることになります。

条件付きブレークポイントを設定し、変数が特定の値に設定されたとき、または特定のしきい値を渡したときにコードを中断するようにするには、余白をクリックしてブレークポイントを設定し、表示されるホバー メニューから "歯車" を選択します。

Visual Studio のブレークポイント設定

次のようなダイアログが表示され、このダイアログで、中断が発生するための特定の条件を設定できます。

Visual Studio 条件付き書式ブレークポイント

条件付きブレークポイントの評価に使用する式を宣言する方法については、Channel9 ビデオ「Breakpoint Configuration Experience in Visual Studio」 (Visual Studio でのブレークポイント構成操作) をご覧ください。

実行時のコードの検査

実行中のコードがブレークポイントにヒットして停止したときに、変数と呼び出し履歴を調べ、内容を確認することができます。 範囲内の値は、予期していたとおりのものですか。 呼び出しの順序は正しいですか。

Visual Studio の実行時の値の検査

変数の上に移動し、その変数に現在格納されている値と参照を確認します。 表示される値が、予期していたものと異なる場合、先行するコード行または呼び出しているコード行にバグがある可能性があります。 ブレークポイントを上に移動するか、条件を既存のブレークポイントに追加して、検索の範囲を狭めます。

さらに、Visual Studio では [診断ツール] ウィンドウが表示されます。このウィンドウで、時間の経過に伴うアプリの CPU 使用率とメモリ使用量の変化を監視することができます。 これを使用して、予期していなかった高い CPU 使用率またはメモリ割り当てがないか調べます。 これを [ウォッチ] ウィンドウおよびブレークポイントとともに使用して、予期していなかった多量の使用の原因となっているもの、または解放されていないリソースを特定します。

Visual Studio [診断ツール] ウィンドウ

単体テストの実行

単体テストは、アプリやサービスのコード パスを実行するプログラムです。 Visual Studio は、マネージ コードおよびネイティブ コード用の Microsoft 単体テスト フレームワークをインストールします。 単体テスト フレームワークを使用して、単体テストを作成して実行し、そのテストの結果を報告します。 変更を加えたときは単体テストを再実行し、コードが正しく機能するかテストします。 Visual Studio Enterprise Edition を使用すると、ビルドの後でテストを自動的に実行できます。

最初に、「IntelliTest でのコードの単体テストの生成」をお読みください。

Visual Studio の単体テストの詳細、およびより優れた品質のコードの作成に単体テストがどのように役立つかについては、「単体テストの基本」をお読みください。

関連項目

デバッガー機能ツアー
デバッガーの設定と準備
64 ビット アプリケーションをデバッグする
デバッガーの基本事項