チュートリアル: Visual Studio を使用して .NET コンソール アプリケーションをデバッグする
このチュートリアルでは、Visual Studio で使用できるデバッグ ツールについて説明します。
重要
すべてのキーボード ショートカットは、Visual Studio の既定値に基づいています。 キーボード ショートカットは異なる場合があります。詳細については、「Visual Studioのキーボード ショートカット
前提 条件
- このチュートリアルは、「Visual Studioを使用して .NET コンソール アプリケーションを作成する
で作成するコンソール アプリと連携します。
デバッグ ビルド構成を使用する
デバッグ と リリース は、Visual Studio の組み込みのビルド構成です。 デバッグにはデバッグ ビルド構成を使用し、最終リリース配布にはリリース構成を使用します。
デバッグ構成では、プログラムは完全なシンボリック デバッグ情報を使用してコンパイルされ、最適化は行われません。 ソース コードと生成された命令の関係がより複雑になるため、最適化によってデバッグが複雑になります。 プログラムのリリース構成にはシンボリック デバッグ情報がなく、完全に最適化されています。
既定では、Visual Studio ではデバッグ ビルド構成が使用されるため、デバッグ前に変更する必要はありません。
Visual Studio を起動します。
Visual Studioを使用して .NET コンソール アプリケーションを作成
で作成したプロジェクトを開きます。 現在のビルド構成がツール バーに表示されます。 次のツール バーイメージは、Visual Studio がアプリのデバッグ バージョンをコンパイルするように構成されていることを示しています。
デバッグが強調表示された Visual Studio ツール バー
ブレークポイントを設定する
ブレークポイント は、ブレークポイントのある行が実行される前に、アプリケーションの実行を一時的に中断します。
その行のコード ウィンドウの左余白をクリックして、名前、日付、時刻を表示する行に ブレークポイント を設定します。 左余白は行番号の左側にあります。 ブレークポイントを設定するその他の方法としては、コード行にカーソルを置き、F9
押すか、メニュー バーから [デバッグ] [ブレークポイントの切り替え] 選択します。 次の図に示すように、Visual Studio はブレークポイントを強調表示し、左余白に赤い点を表示することで、ブレークポイントが設定されている行を示します。
ブレークポイントが に設定された Visual Studio Program ウィンドウの
F5
押して、プログラムをデバッグ モードで実行します。 デバッグを開始するもう 1 つの方法は、メニューから [デバッグ] [デバッグの開始] 選択することです。 プログラムで名前の入力を求められたら、コンソール ウィンドウに文字列を入力し、Enterキー
押します。 ブレークポイントに達すると、
Console.WriteLine
メソッドが実行される前に、プログラムの実行が停止します。 ローカル ウィンドウには、現在実行中のメソッドで定義されている変数の値が表示されます。のブレークポイントのスクリーンショット
イミディエイト ウィンドウを使用する
イミディエイト ウィンドウを使用すると、デバッグしているアプリケーションを操作できます。 変数の値を対話形式で変更して、プログラムに与える影響を確認できます。
[イミディエイト] ウィンドウが表示されない場合は、[デバッグ]>[Windows]>[イミディエイト] の順に選択して表示します。
イミディエイト ウィンドウに「
name = "Gracie"
」と入力し、Enter キー 押します。イミディエイト ウィンドウに「
currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()
」と入力し、Enter キー 押します。イミディエイト ウィンドウには、文字列変数の値と DateTime 値のプロパティが表示されます。 さらに、変数の値は、ローカル ウィンドウで更新されます。
Visual Studio 2019 の
F5
押してプログラムの実行を続行します。 続行するもう 1 つの方法は、メニューから [デバッグ] [続行] 選択することです。 コンソール ウィンドウに表示される値は、イミディエイト ウィンドウで行った変更に対応します。
任意のキーを押してアプリケーションを終了し、デバッグを停止します。
条件付きブレークポイントを設定する
プログラムは、ユーザーが入力した文字列を表示します。 ユーザーが何も入力しなかった場合はどうなりますか? これは、条件付きブレークポイントと呼ばれる便利なデバッグ機能を使用してテストできます。
ブレークポイントを表す赤い点を右クリックします。 コンテキスト メニューで、[条件] を選択して、[ブレークポイント設定の ] ダイアログを開きます。 まだ選択されていない場合は、条件 のボックスを選択します。
ブレークポイント設定パネルを示す
条件式の場合は、フィールドに、
x
が 5 かどうかをテストするコード例を示す次のコードを入力します。string.IsNullOrEmpty(name)
String.IsNullOrEmpty(name)
ブレークポイントにヒットするたびに、デバッガーは
String.IsNullOrEmpty(name)
メソッドを呼び出し、メソッド呼び出しがtrue
を返す場合にのみ、この行で中断します。条件式の代わりに、ヒット カウントを指定できます。この場合、ステートメントを指定した回数だけ実行する前にプログラムの実行が中断されます。 もう 1 つのオプションは、フィルター条件を指定することです。これにより、スレッド識別子、プロセス名、またはスレッド名などの属性に基づいてプログラムの実行が中断されます。
[閉じる] を選択して、ダイアログを閉じます。
F5キー
押して、デバッグでプログラムを開始します。 コンソール ウィンドウで、名前の入力を求められたら、Enter キーを押します。
指定した条件 (
name
がnull
または String.Emptyのいずれか) を満たしているため、ブレークポイントに達すると、Console.WriteLine
メソッドが実行される前にプログラムの実行が停止します。ローカル ウィンドウを選択すると、現在実行中のメソッドに対してローカルな変数の値が表示されます。 この場合、
Main
は現在実行中のメソッドです。name
変数の値が""
、または String.Emptyされていることを確認します。イミディエイト ウィンドウに次のステートメントを入力し、Enterキー押して、値が空の文字列であることを確認します。 結果は true
です。? name == String.Empty
? String.IsNullOrEmpty(name)
疑問符は、イミディエイト ウィンドウに、式を評価するように指示します。
F5
押してプログラムの実行を続行します。 任意のキーを押してコンソール ウィンドウを閉じ、デバッグを停止します。
コード ウィンドウの左余白にあるドットをクリックして、ブレークポイントをクリアします。 ブレークポイントをクリアするその他の方法は、F9
押すか、コード行の選択中に [デバッグ] [ブレークポイントの切り替え] 選択することです。
プログラムのステップ実行
Visual Studio では、プログラムを 1 行ずつステップ実行し、その実行を監視することもできます。 通常は、ブレークポイントを設定し、プログラム コードのごく一部を通してプログラム フローに従います。 このプログラムは小さいので、プログラム全体をステップ実行できます。
[デバッグ]>[ステップ イン] の順に選択します。 一度に 1 つのステートメントをデバッグするもう 1 つの方法は、F11
押すことです。 Visual Studio では、次の実行行の横に矢印が表示され、強調されます。
C#
Visual Studio のステップ イン メソッドの
Visual Basic
Visual Studio のステップ イン メソッド
この時点で、ローカル ウィンドウには、
args
配列が空で、name
とcurrentDate
に既定値が表示されます。 さらに、空のコンソール ウィンドウが開かれています。F11
押します。 Visual Studio で次の実行行が強調表示されるようになりました。 ローカル ウィンドウは変更されず、コンソール ウィンドウは空白のままです。 C#
メソッド ソースにステップインする Visual Studio - C#
Visual Basic
Visual Studioでメソッドソースにステップイン - Visual Basic
F11
押します。 Visual Studio では、 name
変数の割り当てを含むステートメントが強調表示されます。 [ローカル] ウィンドウにname
がnull
であると表示され、コンソール ウィンドウに "What is your name?" という文字列が表示されます。コンソール ウィンドウに文字列を入力し、Enterキー
押して、プロンプトに応答します。 コンソールが応答せず、入力した文字列はコンソール ウィンドウに表示されませんが、Console.ReadLine メソッドは入力をキャプチャします。 F11
押します。 Visual Studio では、 currentDate
変数の割り当てを含むステートメントが強調表示されます。 ローカル ウィンドウには、Console.ReadLine メソッドの呼び出しによって返される値が表示されます。 コンソール ウィンドウには、プロンプトで入力した文字列も表示されます。F11
押します。 ローカル ウィンドウには、DateTime.Now プロパティからの割り当ての後に currentDate
変数の値が表示されます。 コンソール ウィンドウは変更されません。F11
押します。 Visual Studio は、Console.WriteLine(String, Object, Object) メソッドを呼び出します。 コンソール ウィンドウに、書式設定された文字列が表示されます。 デバッグ>ステップアウトを選択します。ステップバイステップの実行を停止するもう1つの方法は、Shift+F11を押すことです。
コンソール ウィンドウにメッセージが表示され、キーを押すのを待ちます。
任意のキーを押してコンソール ウィンドウを閉じ、デバッグを停止します。
リリース ビルド構成を使用する
アプリケーションのデバッグ バージョンをテストしたら、リリース バージョンもコンパイルしてテストする必要があります。 リリース バージョンには、アプリケーションの動作に悪影響を及ぼす可能性があるコンパイラの最適化が組み込まれています。 たとえば、パフォーマンスを向上させるために設計されたコンパイラの最適化は、マルチスレッド アプリケーションで競合状態を作成できます。
コンソール アプリケーションのリリース バージョンをビルドしてテストするには、ツール バーのビルド構成を Debug から Releaseに変更します。
F5
次の手順
このチュートリアルでは、Visual Studio デバッグ ツールを使用しました。 次のチュートリアルでは、アプリのデプロイ可能なバージョンを発行します。
Visual Studio を使用して .NET コンソール アプリケーションを発行する
.NET