次の方法で共有


チュートリアル: Visual Studio を使用して .NET コンソール アプリケーションをデバッグする

このチュートリアルでは、Visual Studio で使用できるデバッグ ツールについて説明します。

重要

すべてのキーボード ショートカットは、Visual Studio の既定値に基づいています。 キーボード ショートカットは異なる場合があります。詳細については、「Visual Studioのキーボード ショートカット 参照してください。

前提 条件

  • このチュートリアルは、「Visual Studioを使用して .NET コンソール アプリケーションを作成する で作成するコンソール アプリと連携します。

デバッグ ビルド構成を使用する

デバッグリリース は、Visual Studio の組み込みのビルド構成です。 デバッグにはデバッグ ビルド構成を使用し、最終リリース配布にはリリース構成を使用します。

デバッグ構成では、プログラムは完全なシンボリック デバッグ情報を使用してコンパイルされ、最適化は行われません。 ソース コードと生成された命令の関係がより複雑になるため、最適化によってデバッグが複雑になります。 プログラムのリリース構成にはシンボリック デバッグ情報がなく、完全に最適化されています。

既定では、Visual Studio ではデバッグ ビルド構成が使用されるため、デバッグ前に変更する必要はありません。

  1. Visual Studio を起動します。

  2. Visual Studioを使用して .NET コンソール アプリケーションを作成 で作成したプロジェクトを開きます。

    現在のビルド構成がツール バーに表示されます。 次のツール バーイメージは、Visual Studio がアプリのデバッグ バージョンをコンパイルするように構成されていることを示しています。

    デバッグが強調表示された Visual Studio ツール バー

ブレークポイントを設定する

ブレークポイント は、ブレークポイントのある行が実行される前に、アプリケーションの実行を一時的に中断します。

  1. その行のコード ウィンドウの左余白をクリックして、名前、日付、時刻を表示する行に ブレークポイント を設定します。 左余白は行番号の左側にあります。 ブレークポイントを設定するその他の方法としては、コード行にカーソルを置き、F9 押すか、メニュー バーから [デバッグ][ブレークポイントの切り替え] 選択します。

    次の図に示すように、Visual Studio はブレークポイントを強調表示し、左余白に赤い点を表示することで、ブレークポイントが設定されている行を示します。

    ブレークポイントが に設定された Visual Studio Program ウィンドウの

  2. F5 押して、プログラムをデバッグ モードで実行します。 デバッグを開始するもう 1 つの方法は、メニューから [デバッグ][デバッグの開始] 選択することです。

  3. プログラムで名前の入力を求められたら、コンソール ウィンドウに文字列を入力し、Enterキー 押します。

  4. ブレークポイントに達すると、Console.WriteLine メソッドが実行される前に、プログラムの実行が停止します。 ローカル ウィンドウには、現在実行中のメソッドで定義されている変数の値が表示されます。

    Visual Studio のブレークポイントのスクリーンショット

イミディエイト ウィンドウを使用する

イミディエイト ウィンドウを使用すると、デバッグしているアプリケーションを操作できます。 変数の値を対話形式で変更して、プログラムに与える影響を確認できます。

  1. [イミディエイト] ウィンドウが表示されない場合は、[デバッグ]>[Windows]>[イミディエイト] の順に選択して表示します。

  2. イミディエイト ウィンドウに「name = "Gracie"」と入力し、Enter キー 押します。

  3. イミディエイト ウィンドウに「currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()」と入力し、Enter キー 押します。

    イミディエイト ウィンドウには、文字列変数の値と DateTime 値のプロパティが表示されます。 さらに、変数の値は、ローカル ウィンドウで更新されます。

    Visual Studio 2019 の ローカルウィンドウとイミディエイト ウィンドウ

  4. F5 押してプログラムの実行を続行します。 続行するもう 1 つの方法は、メニューから [デバッグ][続行] 選択することです。

    コンソール ウィンドウに表示される値は、イミディエイト ウィンドウで行った変更に対応します。

    コンソール ウィンドウに入力された値が表示

  5. 任意のキーを押してアプリケーションを終了し、デバッグを停止します。

条件付きブレークポイントを設定する

プログラムは、ユーザーが入力した文字列を表示します。 ユーザーが何も入力しなかった場合はどうなりますか? これは、条件付きブレークポイントと呼ばれる便利なデバッグ機能を使用してテストできます。

  1. ブレークポイントを表す赤い点を右クリックします。 コンテキスト メニューで、[条件] を選択して、[ブレークポイント設定の ] ダイアログを開きます。 まだ選択されていない場合は、条件 のボックスを選択します。

    ブレークポイント設定パネルを示す エディター - C#

  2. 条件式の場合は、フィールドに、x が 5 かどうかをテストするコード例を示す次のコードを入力します。

    string.IsNullOrEmpty(name)
    
    String.IsNullOrEmpty(name)
    

    ブレークポイントにヒットするたびに、デバッガーは String.IsNullOrEmpty(name) メソッドを呼び出し、メソッド呼び出しが trueを返す場合にのみ、この行で中断します。

    条件式の代わりに、ヒット カウントを指定できます。この場合、ステートメントを指定した回数だけ実行する前にプログラムの実行が中断されます。 もう 1 つのオプションは、フィルター条件を指定することです。これにより、スレッド識別子、プロセス名、またはスレッド名などの属性に基づいてプログラムの実行が中断されます。

  3. [閉じる] を選択して、ダイアログを閉じます。

  4. F5キー 押して、デバッグでプログラムを開始します。

  5. コンソール ウィンドウで、名前の入力を求められたら、Enter キーを押します。

  6. 指定した条件 (namenull または String.Emptyのいずれか) を満たしているため、ブレークポイントに達すると、Console.WriteLine メソッドが実行される前にプログラムの実行が停止します。

  7. ローカル ウィンドウを選択すると、現在実行中のメソッドに対してローカルな変数の値が表示されます。 この場合、Main は現在実行中のメソッドです。 name 変数の値が ""、または String.Emptyされていることを確認します。

  8. イミディエイト ウィンドウに次のステートメントを入力し、Enterキー 押して、値が空の文字列であることを確認します。 結果は trueです。

    ? name == String.Empty
    
    ? String.IsNullOrEmpty(name)
    

    疑問符は、イミディエイト ウィンドウに、式を評価するように指示します。

    ステートメントの実行後に true の値を返すイミディエイト ウィンドウ - C#

  9. F5 押してプログラムの実行を続行します。

  10. 任意のキーを押してコンソール ウィンドウを閉じ、デバッグを停止します。

  11. コード ウィンドウの左余白にあるドットをクリックして、ブレークポイントをクリアします。 ブレークポイントをクリアするその他の方法は、F9 押すか、コード行の選択中に [デバッグ] [ブレークポイントの切り替え] 選択することです。

プログラムのステップ実行

Visual Studio では、プログラムを 1 行ずつステップ実行し、その実行を監視することもできます。 通常は、ブレークポイントを設定し、プログラム コードのごく一部を通してプログラム フローに従います。 このプログラムは小さいので、プログラム全体をステップ実行できます。

  1. [デバッグ]>[ステップ イン] の順に選択します。 一度に 1 つのステートメントをデバッグするもう 1 つの方法は、F11押すことです。

    Visual Studio では、次の実行行の横に矢印が表示され、強調されます。

    C#

    Visual Studio のステップ イン メソッドの Visual Studio のステップ イン メソッド - C#

    Visual Basic

    Visual Studio のステップ イン メソッド - Visual Basic

    この時点で、ローカル ウィンドウには、args 配列が空で、namecurrentDate に既定値が表示されます。 さらに、空のコンソール ウィンドウが開かれています。

  2. F11押します。 Visual Studio で次の実行行が強調表示されるようになりました。 ローカル ウィンドウは変更されず、コンソール ウィンドウは空白のままです。

    C#

    メソッド ソースにステップインする Visual Studio - C# Visual Studio のステップ イン メソッド ソース - C#

    Visual Basic

    Visual Studioでメソッドソースにステップイン - Visual Basic

  3. F11押します。 Visual Studio では、name 変数の割り当てを含むステートメントが強調表示されます。 [ローカル] ウィンドウに namenull であると表示され、コンソール ウィンドウに "What is your name?" という文字列が表示されます。

  4. コンソール ウィンドウに文字列を入力し、Enterキー 押して、プロンプトに応答します。 コンソールが応答せず、入力した文字列はコンソール ウィンドウに表示されませんが、Console.ReadLine メソッドは入力をキャプチャします。

  5. F11押します。 Visual Studio では、currentDate 変数の割り当てを含むステートメントが強調表示されます。 ローカル ウィンドウには、Console.ReadLine メソッドの呼び出しによって返される値が表示されます。 コンソール ウィンドウには、プロンプトで入力した文字列も表示されます。

  6. F11押します。 ローカル ウィンドウには、DateTime.Now プロパティからの割り当ての後に currentDate 変数の値が表示されます。 コンソール ウィンドウは変更されません。

  7. F11押します。 Visual Studio は、Console.WriteLine(String, Object, Object) メソッドを呼び出します。 コンソール ウィンドウに、書式設定された文字列が表示されます。

  8. デバッグ>ステップアウトを選択します。ステップバイステップの実行を停止するもう1つの方法は、Shift+F11を押すことです。

    コンソール ウィンドウにメッセージが表示され、キーを押すのを待ちます。

  9. 任意のキーを押してコンソール ウィンドウを閉じ、デバッグを停止します。

リリース ビルド構成を使用する

アプリケーションのデバッグ バージョンをテストしたら、リリース バージョンもコンパイルしてテストする必要があります。 リリース バージョンには、アプリケーションの動作に悪影響を及ぼす可能性があるコンパイラの最適化が組み込まれています。 たとえば、パフォーマンスを向上させるために設計されたコンパイラの最適化は、マルチスレッド アプリケーションで競合状態を作成できます。

コンソール アプリケーションのリリース バージョンをビルドしてテストするには、ツール バーのビルド構成を Debug から Releaseに変更します。

'Visual Studio' のリリースが強調表示された既定のツールバー

F5 押すか、[ビルド] メニュー [ソリューションのビルド] を選択すると、Visual Studio によってアプリケーションのリリース バージョンがコンパイルされます。 デバッグ バージョンの場合と同様にテストできます。

次の手順

このチュートリアルでは、Visual Studio デバッグ ツールを使用しました。 次のチュートリアルでは、アプリのデプロイ可能なバージョンを発行します。

Visual Studio を使用して .NET コンソール アプリケーションを発行する