この記事では、段階的なチュートリアルで Visual Studio デバッガーの機能について説明します。 デバッガー機能の概要については、「 Visual Studio デバッガーの概要」を参照してください。 アプリをデバッグするときは、通常、デバッガーがアタッチされた状態でアプリケーションを実行していることを意味します。 このタスクを実行すると、デバッガーには、実行中のコードの動作を確認するためのさまざまな方法が用意されています。
- コードをステップ実行し、変数に格納されている値を確認します。
- 変数にウォッチを設定して、値がいつ変化するかを確認します。
- コードの実行パスを調べて、コードの分岐が実行されているかどうかを確認します。
この演習が初めてコードをデバッグしようとした場合は、 初心者向けのデバッグを読むとよいでしょう。
この記事のデモ アプリでは Visual Basic を使用していますが、ほとんどの機能は、Visual Studio でサポートされている C#、C++、F#、Python、JavaScript、およびその他の言語に適用されます。 F# はエディット コンティニュをサポートしていません。 F# と JavaScript では、[ 自動変数 ] ウィンドウはサポートされていません。 スクリーンショットは Visual Basic にあります。
このチュートリアルでは、次の操作を行います。
- デバッガーを起動してブレークポイントにヒットする
- デバッガーでコードをステップ実行するコマンドについて説明します
- データ ヒントとデバッガー ウィンドウで変数を検査する
- コールスタックを調べる
[前提条件]
.NET Core クロスプラットフォーム開発ワークロードを含め、Visual Studio がインストールされている必要があります。
- Visual Studio をインストールする必要がある場合は、無料版の Visual Studio のダウンロードを参照してください。
- ワークロードをインストールする必要があるが、既に Visual Studio がある場合は、[ ツール>Get Tools and Features...] に移動します。これで Visual Studio インストーラーが開きます。 .NET デスクトップ開発ワークロードを選択し、[変更] を選択します。
プロジェクトを作成する
まず、.NET Core コンソール アプリケーション プロジェクトを作成します。 プロジェクトの種類には、何かを追加する前に、必要なすべてのテンプレート ファイルが付属しています。
Visual Studio を開きます。 スタート ウィンドウが開いていない場合は、[ ファイル>スタート ウィンドウ] を選択します。
[スタート ウィンドウ] で、 [新しいプロジェクトの作成] を選択します。
[ 新しいプロジェクトの作成 ] ウィンドウの検索ボックスに「コンソール」と入力 します。 次に、[言語] の一覧から [Visual Basic ] を選択し、[プラットフォーム] の一覧から [Windows ] を選択します。
言語フィルターとプラットフォーム フィルターを適用したら、.NET Core の コンソール アプリ テンプレートを選択し、[ 次へ] を選択します。
注
コンソール アプリ テンプレートが表示されない場合は、[新しいプロジェクトの作成] ウィンドウからインストールできます。 [ 探しているものが見つかりません] メッセージで、[ その他のツールと機能のインストール ] リンクを選択します。 次に、Visual Studio インストーラーで 、.NET デスクトップ開発 ワークロードを選択します。 [ 新しいプロジェクトの構成 ] ウィンドウの [プロジェクト名] に、「 get-started-debugging」と入力します。 次に、 [次へ] を選択します。
[追加情報] ウィンドウで、[Framework] で [.NET 10.0] が選択されていることを確認し、[作成] を選択します。
Visual Studio を開きます。 スタート ウィンドウが開いていない場合は、[ ファイル>スタート ウィンドウ] を選択します。
[スタート ウィンドウ] で、 [新しいプロジェクトの作成] を選択します。
[ 新しいプロジェクトの作成 ] ウィンドウの検索ボックスに「コンソール」と入力 します。 次に、[言語] の一覧から [Visual Basic ] を選択し、[プラットフォーム] の一覧から [Windows ] を選択します。
言語フィルターとプラットフォーム フィルターを適用したら、.NET Core の コンソール アプリ テンプレートを選択し、[ 次へ] を選択します。
注
コンソール アプリ テンプレートが表示されない場合は、[新しいプロジェクトの作成] ウィンドウからインストールできます。 [ 探しているものが見つかりません] メッセージで、[ その他のツールと機能のインストール ] リンクを選択します。 次に、Visual Studio インストーラーで 、.NET デスクトップ開発 ワークロードを選択します。 [ 新しいプロジェクトの構成 ] ウィンドウの [プロジェクト名] に、「 get-started-debugging」と入力します。 次に、 [次へ] を選択します。
[追加情報] ウィンドウで、[Framework] で [.NET 8.0] が選択されていることを確認し、[作成] を選択します。
Visual Studio で新しいプロジェクトが開きます。
アプリケーションを作成する
Program.vbで、すべての既定のコードを次のコードに置き換えます。
Imports System
Class ArrayExample
Public Shared Sub Main()
Dim letters As Char() = {"f"c, "r"c, "e"c, "d"c, " "c, "s"c, "m"c, "i"c, "t"c, "h"c}
Dim name As String = ""
Dim a As Integer() = New Integer(9) {}
For i As Integer = 0 To letters.Length - 1
name += letters(i)
a(i) = i + 1
SendMessage(name, a(i))
Next
Console.ReadKey()
End Sub
Private Shared Sub SendMessage(ByVal name As String, ByVal msg As Integer)
Console.WriteLine("Hello, " & name & "! Count to " & msg)
End Sub
End Class
デバッガーを起動します。
F5 キーを押すか (デバッグ>デバッグの開始)、またはデバッグ ツール バーの緑色の [デバッグの開始] ボタンを選択します。
F5 キー を使用すると、デバッガーがアプリ プロセスにアタッチされた状態でアプリが開始されます。 ここまでは、コードを調べるために特別な作業を行っていません。 アプリが読み込まれるだけで、コンソールの出力が表示されます。
Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10このチュートリアルでは、デバッガーを使用してこのアプリを詳しく見て、デバッガーの機能を確認します。
(Shift + F5 キーを押してデバッガーを停止するか、デバッグ ツール バーの赤い [デバッグの停止 ] ボタンを選択します。
コンソール ウィンドウで、キーを押してコンソール ウィンドウを閉じます。
ブレークポイントを設定してデバッガーを起動する
For関数のMainループで、次のコード行の左余白をクリックしてブレークポイントを設定します。name += letters(i)ブレークポイントを設定した場所に赤い円が表示されます。
ブレークポイントは、信頼性の高いデバッグの最も基本的で重要な機能の 1 つです。 ブレークポイントは、Visual Studio が実行中のコードを中断する場所を示します。 中断中は、変数の値やメモリの動作を確認できます。 コードの分岐が実行されているかどうかを確認できます。
F5 キー (デバッグ >デバッグの開始) またはデバッグ ツール バーの [デバッグの開始] ボタンを押します。 アプリが起動し、ブレークポイントを設定したコード行にデバッガーが実行されます。
黄色の矢印は、デバッガーが一時停止したステートメントを表します。また、同じポイントでアプリの実行が中断されます。 このステートメントはまだ実行されていません。
アプリがまだ実行されていない場合、 F5 は デバッガーを起動し、最初のブレークポイントで停止します。 それ以外の場合、 F5 は アプリの実行を続行して次のブレークポイントに進みます。
ブレークポイントは、コード行または詳細に調べるコードのセクションがわかっている場合に便利な機能です。 さまざまな種類のブレークポイントの詳細については、「ブレークポイントの 使用」を参照してください。
ステップ コマンドを使用してデバッガー内のコード内を移動する
この記事では、キーボード ショートカットを使用します。これは、デバッガーでアプリを高速に実行する良い方法であるためです。 メニュー コマンドなどの同等のコマンドがかっこで囲まれて表示されます。
ForメソッドのMainループでコードの実行が一時停止している間に、F11 キーを押して (または[デバッグ] >ステップ インを選択)、SendMessageメソッドの呼び出しに進みます。F11 キーを 2 回押すと、次のコード行に移動します。
SendMessage(name, a(i))もう一度 F11 キーを押して、
SendMessageメソッドにステップ インします。黄色のポインターが
SendMessageメソッドに進みます。
F11 は ステップ イン コマンドです。 一度に 1 つのステートメントでアプリの実行が進みます。 F11 は、実行フローを最も詳細に調べるのに適した方法です。 既定では、デバッガーは非ユーザー コードをスキップします。 より詳しい情報については、「Just My Code」を参照してください。
SendMessageメソッドの検査が完了し、メソッドから抜け出してデバッガーに留めたいとします。 これを行うには、[ ステップ アウト ] コマンドを使用します。Shift + F11 (またはデバッグ>ステップ アウト) を押します。
このコマンドは、アプリの実行を再開し、現在のメソッドまたは関数が返されるまでデバッガーを進めます。
ForメソッドのMainループに戻り、SendMessageメソッドの呼び出しで一時停止します。メソッドの呼び出しに戻るまで、
SendMessageキーを数回押します。メソッド呼び出しでコードの実行が一時停止している間に、 F10 キーを押します (または、[ デバッグ] > ステップ オーバーを選択します)。
今回は、デバッガーが
SendMessageメソッドにステップ インしません。 F10 は、アプリ コード内の関数やメソッドにステップ インすることなくデバッガーを進めます。 コードは引き続き実行されます。 F11 ではなくSendMessageメソッド呼び出しで F10 キーを押すと、SendMessageの実装コードがスキップされました。 コード内を移動するさまざまな方法の詳細については、「デバッガー内のコード内を移動する」を参照してください。
Run to Click を使用してコード内を移動する
もう一度ブレークポイントに進むには 、F5 キー を押します。
コード エディターで、下にスクロールし、
Console.WriteLineメソッドのSendMessageメソッドの上にマウス ポインターを置いて、緑色の [クリックまで実行] ボタンが表示されます。 ボタンのツールヒントには、ここまで実行と表示されます。
[クリックして実行] ボタンを選択します。
デバッガーは、
Console.WriteLineメソッドに進みます。このボタンの使用は、一時的なブレークポイントの設定と似ています。 [クリックまで実行] は、開いている任意のファイルで選択できるアプリコードの可視領域内をすばやく移動するのに便利です。
アプリをすばやく再起動する
アプリを再起動するには、 Ctrl + Shift + F5 キーの組み合わせを押します。 アプリを停止してデバッガーを再起動する場合と比して、時間を節約できます。 デバッガーは、コードの実行によってヒットした最初のブレークポイントで一時停止します。
デバッガーは、 For ループ内で前に設定したブレークポイントで再び停止します。
データ ヒントを使用して変数を検査する
デバッガーには、変数を検査できる機能があります。 変数を検査する方法はさまざまです。 多くの場合、問題をデバッグしようとすると、変数が特定の時点で予想される値を格納しているかどうかを調べようとします。
name += letters[i]ステートメントでコードの実行が一時停止されている間は、letters変数にカーソルを合わせます。 その既定値、配列内の最初の要素の値、"f"cが表示されます。次に、
name変数にカーソルを合わせると、現在の値 (空の文字列) が表示されます。F5 (または Debug>Continue) キーを数回押して、
Forループを数回反復処理し、ブレークポイントでもう一度一時停止し、その値を確認するたびにname変数をポイントします。
変数の値は、
Forループの反復ごとに変化し、f、fr、freなどの値が表示されます。多くの場合、コードをデバッグするときに、変数のプロパティ値を簡単にチェックして、格納する値が格納されているかどうかを確認する必要があります。 データヒントは、これを行う良い方法です。
[自動変数] ウィンドウと [ローカル] ウィンドウを使用して変数を検査する
コード エディターの下部にある オート ウィンドウを見てください。
閉じている場合は、 デバッグ>Windows>Autos を選択して、デバッガーでコードの実行が一時停止している間に開きます。
[ 自動変数 ] ウィンドウに、変数とその現在の値が表示されます。 [自動変数] ウィンドウには、現在の行または前の行で使用されているすべての変数が表示されます。 言語固有の動作については、ドキュメントを参照してください。
次に、[自動変数] ウィンドウの横にあるタブの [ローカル] ウィンドウを見てください。
letters変数を展開して、含まれる要素を表示します。
ローカル ウィンドウには、現在の スコープ、つまり現在の実行コンテキストにある変数が表示されます。
時計を設定する
コードのステップ実行時に監視する変数または式を指定するには、[ ウォッチ ] ウィンドウに追加します。
デバッガーが一時停止している間に、
name変数を右クリックし、[ウォッチの 追加] を選択します。既定では、コード エディターの下部に [ウォッチ ] ウィンドウが開きます。
name変数にウォッチを設定したので、コードをステップ実行して、name変数の値が各forループイテレーションで変化することを確認します。他の変数ウィンドウとは異なり、ウォッチ ウィンドウには、監視している変数が常に表示されます。 スコープ外の変数は使用不可として表示されます。
[ウォッチ] ウィンドウの詳細については、「ウォッチ ウィンドウを使用したウォッチ変数」を参照してください。
コールスタックを調べる
Forループでコードの実行が一時停止している間に、[呼び出し履歴] ウィンドウを選択します。このウィンドウは、右下のウィンドウで既定で開きます。閉じている場合は、 デバッグ>Windows>Call Stack を選択して、デバッガーでコードの実行が一時停止している間に開きます。
メソッドでデバッガーが一時停止するまで
SendMessageを数回選択します。 [呼び出し履歴] ウィンドウを見てください。
呼び出し履歴 ウィンドウには、メソッドと関数が呼び出される順序が表示されます。 上の行に現在の関数が表示されます。 この例では、
SendMessageメソッドです。 2 行目は、SendMessageメソッドからMainが呼び出されたことを示しています。注
[呼び出し履歴] ウィンドウは、Eclipse などの一部のプログラミング ツールのデバッグパースペクティブに似ています。
呼び出し履歴は、アプリの実行フローを調べて理解するのに適した方法です。
コード行をダブルクリックすると、そのソース コードを確認できます。また、デバッガーによる検査中の現在のスコープも変更されます。 このアクションによってデバッガーが進むことはありません。
呼び出し履歴 ウィンドウから右クリック メニューを使用して、他の操作を行うこともできます。 たとえば、指定した関数にブレークポイントを挿入し、[ カーソルまで実行] を使用してデバッガーを進め、ソース コードを調べることができます。 詳細については、「 方法: 呼び出し履歴を調べる」を参照してください。
実行フローを変更する
F11 キーを 2 回押して、
Console.WriteLineメソッドを実行します。デバッガーが
SendMessageメソッド呼び出しで一時停止した状態で、マウスを使用して左余白にある黄色の矢印または実行ポインターをつかみ、ポインターを 1 行上にドラッグしてConsole.WriteLineステートメントに移動します。F11 キーを押します。
デバッガーは、
Console.WriteLineメソッドを再実行します。 このアクションは、コンソール ウィンドウの出力に表示されます。実行フローを変更することで、デバッガーを再起動せずに、さまざまなコード実行パスをテストしたり、コードを再実行したりすることができます。
Warnung
多くの場合、この機能には注意が必要です。 ツールヒントに警告が表示されます。 他の警告も表示される場合があります。 ポインターを移動すると、アプリケーションを以前のアプリの状態に戻すことはできません。
F5 キーを押してアプリの実行を続行します。
このチュートリアルを完了しておめでとうございます。
関連するコンテンツ
このチュートリアルでは、デバッガーを起動し、コードをステップ実行し、変数を検査する方法について説明しました。 詳細な情報へのリンクと共に、デバッガーの機能を大まかに見ることができます。