次の方法で共有


チュートリアル: Visual Studio を使用して Visual Basic コードをデバッグする方法について説明します

この記事では、段階的なチュートリアルで Visual Studio デバッガーの機能について説明します。 デバッガー機能の上位レベルのビューが必要な場合は、「デバッガーのを最初に確認する」を参照してください。 アプリをデバッグするときは、通常、デバッガーがアタッチされた状態でアプリケーションを実行していることを意味します。 このタスクを実行すると、デバッガーには、実行中のコードの動作を確認するためのさまざまな方法が用意されています。 コードをステップ実行して変数に格納されている値を確認したり、変数にウォッチを設定して値がいつ変化するかを確認したり、コードの実行パスを調べたり、コードの分岐が実行されているかどうかを確認したりできます。 この演習がコードのデバッグを初めて試みた場合は、この記事を読む前に、 初心者向けのデバッグ をお読みください。

デモ アプリは Visual Basic ですが、ほとんどの機能は、Visual Studio でサポートされている C#、C++、F#、Python、JavaScript、およびその他の言語に適用できます (F# ではエディット コンティニュはサポートされていません。F# と JavaScript では 、Autos ウィンドウは サポートされていません)。 スクリーンショットは Visual Basic にあります。

このチュートリアルでは、次のことを行います。

  • デバッガーを起動し、ブレークポイントをヒットします。
  • デバッガーでコードをステップ実行するコマンドについて説明します
  • データ ヒントとデバッガー ウィンドウで変数を検査する
  • コールスタックを調べる

[前提条件]

Visual Studio 2019 と .NET Core クロスプラットフォーム開発 ワークロードがインストールされている必要があります。

Visual Studio をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動して無料でインストールします。

ワークロードをインストールする必要があるが、既に Visual Studio がある場合は、[ ツール>Get Tools and Features...] に移動します。これで Visual Studio インストーラーが開きます。 Visual Studio インストーラーが起動します。 .NET デスクトップ開発ワークロードを選択し、[変更] を選択します。

プロジェクトを作成する

まず、.NET Core コンソール アプリケーション プロジェクトを作成します。 プロジェクトの種類には、何も追加する前に、必要なすべてのテンプレート ファイルが付属しています。

  1. Visual Studio を開きます。 スタート ウィンドウが開いていない場合は、[ ファイル>スタート ウィンドウ] を選択します。

  2. [スタート ウィンドウ] で、 [新しいプロジェクトの作成] を選択します。

  1. [ 新しいプロジェクトの作成 ] ウィンドウで、検索ボックスに 「コンソール 」と入力します。 次に、[言語] の一覧から [Visual Basic ] を選択し、[プラットフォーム] の一覧から [Windows ] を選択します。

    言語フィルターとプラットフォーム フィルターを適用したら、.NET Core の コンソール アプリ テンプレートを選択し、[ 次へ] を選択します。

    [Create a new project]\(新しいプロジェクトの作成\) ウィンドウを示すスクリーンショット。[コンソール] が検索ボックスに表示され、[言語] フィルターと [プラットフォーム] フィルターで [Visual Basic] と [Windows] が選択されています。コンソール アプリケーション プロジェクト テンプレートが選択されています。

    コンソール アプリ テンプレートが表示されない場合は、[新しいプロジェクトの作成] ウィンドウ からインストールできます。 [ 探しているものが見つかりません] メッセージで、[ その他のツールと機能のインストール ] リンクを選択します。 次に、Visual Studio インストーラーで 、.NET デスクトップ開発 ワークロードを選択します。

  2. [新しいプロジェクトの構成] ウィンドウで、[プロジェクト名] ボックスに「get-started-debugging」と入力します。 次に、 [次へ] を選択します。

  3. [追加情報] ウィンドウで、[フレームワーク] ドロップダウン メニューで [.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

デバッガーを起動します。

  1. 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
    

    このチュートリアルでは、デバッガーを使用してこのアプリを詳しく見て、デバッガーの機能を確認します。

  2. (Shift + F5 キーを押してデバッガーを停止するか、デバッグ ツール バーの赤い [デバッグの停止 ] ボタンを選択します。

    赤い [デバッグの停止] ボタンが強調表示されているデバッグ ツール バーを示すスクリーンショット。

  3. コンソール ウィンドウで、キーを押してコンソール ウィンドウを閉じます。

ブレークポイントを設定してデバッガーを起動する

  1. For関数のMain ループで、次のコード行の左余白をクリックしてブレークポイントを設定します。

    name += letters(i)

    ブレークポイントを設定した場所に赤い円が表示されます。

    ブレークポイントは、信頼性の高いデバッグの最も基本的で重要な機能の 1 つです。 ブレークポイントは、変数の値やメモリの動作、またはコードの分岐が実行されているかどうかを確認できるように、Visual Studio で実行中のコードを中断する場所を示します。

  2. F5 キー (デバッグ >デバッグ開始) またはデバッグ ツール バーの [デバッグの開始] ボタンを押すと、アプリが起動し、ブレークポイントを設定したコード行にデバッガーが実行されます。

    ブレークポイントで実行が停止した Visual Studio Code エディター ウィンドウを示すスクリーンショット。

    黄色の矢印は、デバッガーが一時停止したステートメントを表し、同じ時点でアプリの実行も中断します (このステートメントはまだ実行されていません)。

    アプリがまだ実行されていない場合、 F5 は デバッガーを起動し、最初のブレークポイントで停止します。 それ以外の場合、 F5 は アプリの実行を続行して次のブレークポイントに進みます。

    ブレークポイントは、コード行または詳細に調べるコードのセクションがわかっている場合に便利な機能です。 条件付きブレークポイントなど、設定できるさまざまな種類のブレークポイントの詳細については、「 ブレークポイントの使用」を参照してください。

この記事では、キーボード ショートカットを使用します。これは、デバッガーでアプリを高速に実行する良い方法であるためです (メニュー コマンドなどの同等のコマンドをかっこで囲んで示します)。

  1. For メソッドのMain ループでコードの実行が一時停止している間に、F11 キーを押して (または[デバッグ] >ステップ インを選択)、SendMessage メソッドの呼び出しに進みます。

    F11 キーを 2 回押すと、次のコード行に移動します。

    SendMessage(name, a(i))

  2. もう一度 F11 キーを押して、 SendMessage メソッドにステップ インします。

    黄色のポインターが SendMessage メソッドに進みます。

    F11Step Into コマンドで、アプリの実行を一度に 1 つのステートメントに進めます。 F11 は、実行フローを最も詳細に調べるのに適した方法です。 (コード間の移動を高速化するために、その他のオプションも示します)。既定では、デバッガーはユーザー以外のコードをスキップします (詳細については、「 マイ コードのみ」を参照してください)。

    SendMessage メソッドの検査が終わった後、メソッドから抜け出しますが、デバッガーには留まっていたいとします。 これを行うには、[ ステップ アウト ] コマンドを使用します。

  3. Shift + F11 (またはデバッグ>ステップ アウト) を押します。

    このコマンドは、現在のメソッドまたは関数が戻るまでアプリの実行を再開 (およびデバッガーを進めます) します。

    For メソッドのMain ループに戻り、SendMessage メソッドの呼び出しで一時停止します。

  4. メソッドの呼び出しに戻るまで、SendMessage キーを数回押します。

  5. メソッド呼び出しでコードの実行が一時停止している間に、 F10 キーを押します (または、[ デバッグ] > ステップ オーバーを選択します)。

    今回は、デバッガーが SendMessage メソッドにステップ インしていないことを確認してください。 F10 は、アプリ コード内の関数またはメソッドにステップ インすることなくデバッガーを進めます (コードは引き続き実行されます)。 ( F11 ではなく) SendMessage メソッド呼び出しで F10 キーを押すことで、 SendMessage の実装コードをスキップしました (現時点では関心がない可能性があります)。 コード内を移動するさまざまな方法の詳細については、「デバッガー内のコード内を移動する」を参照してください。

  1. もう一度ブレークポイントに進むには 、F5 キー を押します。

  2. コード エディターで、下にスクロールし、Console.WriteLine メソッドの SendMessage メソッドの上にマウス ポインターを置いて、緑色の [クリックまで実行] ボタンが表示されます。 ボタンのツールヒントには、"実行をここから実行する" と表示されます。

    コード エディター ウィンドウの左側にツールヒントが強調表示されている [クリックして実行] ボタンを示すスクリーンショット。

  3. [クリックして実行] ボタンを選択します。

    デバッガーは、 Console.WriteLine メソッドに進みます。

    このボタンの使用は、一時的なブレークポイントの設定と似ています。 [クリックまで実行] は、アプリ コードの表示領域内ですばやく移動するのに便利です (開いている任意のファイルで選択できます)。

アプリをすばやく再起動する

アプリを再起動するには、 Ctrl + Shift + F5 キーの組み合わせを押します。これにより、アプリの停止とデバッガーの再起動に対する時間が節約されます。 デバッガーは、コードの実行によってヒットした最初のブレークポイントで一時停止します。

デバッガーは、 For ループ内で前に設定したブレークポイントで再び停止します。

データ ヒントを使用して変数を検査する

変数を検査できる機能は、デバッガーの最も便利な機能の 1 つであり、さまざまな方法で行うことができます。 多くの場合、問題をデバッグしようとすると、変数が特定の時点で予想される値を格納しているかどうかを調べようとします。

  1. name += letters[i] ステートメントでコードの実行が一時停止されている間、letters変数にカーソルを合わせると、その既定値である配列内の最初の要素の値が"f"c

  2. 次に、 name 変数にカーソルを合わせると、現在の値である空の文字列が表示されます。

  3. F5 (または Debug>Continue) キーを数回押して、For ループを数回反復処理し、ブレークポイントでもう一度一時停止し、その値を確認するたびにname変数をポイントします。

    コード エディターでデバッグ実行が停止し、名前変数が強調表示され、値を示すデータ ヒントが示されているスクリーンショット。

    変数の値は、For ループの反復ごとに変化し、ffrfreなどの値が表示されます。

    デバッグ中によく、変数のプロパティ値が期待通りに格納されているかを簡単に確認したいことがあります。データヒントを使用するとそれを素早く確認できます。

[自動変数] ウィンドウと [ローカル] ウィンドウを使用して変数を検査する

  1. コード エディターの下部にある オート ウィンドウを見てください。

    閉じている場合は、 デバッグ>Windows>Autos を選択して、デバッガーでコードの実行が一時停止している間に開きます。

    [ 自動変数 ] ウィンドウに、変数とその現在の値が表示されます。 [自動変数] ウィンドウには、現在の行または前の行で使用されているすべての変数が表示されます (言語固有の動作についてはドキュメントを確認してください)。

  2. 次に、[自動変数] ウィンドウの横にあるタブの [ローカル] ウィンドウを見てください。

  3. letters変数を展開して、含まれる要素を表示します。

    'letters' 変数が展開された [ローカル] ウィンドウを示すスクリーンショット。含まれている要素の値と型が表示されます。

    ローカル ウィンドウには、現在の スコープ、つまり現在の実行コンテキストにある変数が表示されます。

時計を設定する

コードのステップ実行時に監視する変数または式を指定するには、[ ウォッチ ] ウィンドウに追加します。

  1. デバッガーが一時停止している間に、 name 変数を右クリックし、[ウォッチの 追加] を選択します。

    既定では、コード エディターの下部に [ウォッチ ] ウィンドウが開きます。

  2. name変数にウォッチを設定したので、コードをステップ実行して、name変数の値が各forループイテレーションで変化することを確認します。

    他の変数ウィンドウとは異なり、ウォッチ ウィンドウには、監視している変数が常に表示されます。 スコープ外の変数は使用不可として表示されます。

[ウォッチ] ウィンドウの詳細については、「ウォッチ ウィンドウを使用したウォッチ変数」を参照してください。

コールスタックを調べる

  1. For ループでコードの実行が一時停止している間に、[呼び出し履歴] ウィンドウを選択します。このウィンドウは、右下のウィンドウで既定で開きます。

    閉じている場合は、 デバッグ>Windows>Call Stack を選択して、デバッガーでコードの実行が一時停止している間に開きます。

  2. メソッドでデバッガーが一時停止するまでSendMessageを数回選択します。 [呼び出し履歴] ウィンドウを見てください。

    上の行で SendMessage メソッド呼び出しが強調表示されている Visual Studio の [呼び出し履歴] ウィンドウを示すスクリーンショット。

    呼び出し履歴 ウィンドウには、メソッドと関数が呼び出される順序が表示されます。 上部の行には、現在の関数 (このアプリの SendMessage メソッド) が表示されます。 2 行目は、SendMessage メソッドからMainが呼び出されたことを示しています。

    呼び出し履歴 ウィンドウは、Eclipse などの一部の IDE のデバッグパースペクティブに似ています。

    呼び出し履歴は、アプリの実行フローを調べて理解するのに適した方法です。

    コード行をダブルクリックすると、そのソース コードを確認できます。また、デバッガーによる検査中の現在のスコープも変更されます。 このアクションによってデバッガーが進むことはありません。

    呼び出し履歴 ウィンドウから右クリック メニューを使用して、他の操作を行うこともできます。 たとえば、指定した関数にブレークポイントを挿入し、[ カーソルまで実行] を使用してデバッガーを進め、ソース コードを調べることができます。 詳細については、「 方法: 呼び出し履歴を調べる」を参照してください。

実行フローを変更する

  1. F11 キーを 2 回押して、Console.WriteLine メソッドを実行します。

  2. SendMessage メソッド呼び出しでデバッガーが一時停止した状態で、マウスを使用して黄色の矢印または実行ポインター (左余白) をつかみ、ポインターを 1 行上にドラッグして Console.WriteLine ステートメントに移動します。

  3. F11 キーを押します。

    デバッガーは、 Console.WriteLine メソッドを再実行します (コンソール ウィンドウの出力にこのアクションが表示されます)。

    実行フローを変更することで、異なるコード実行パスをテストしたり、デバッガーを再起動せずにコードを再実行したりすることができます。

    Warnung

    多くの場合、この機能に注意する必要があり、ヒントに警告が表示されます。 他の警告も表示される場合があります。 ポインターを移動しても、アプリケーションを以前のアプリの状態に戻すことはできません。

  4. F5 キーを押してアプリの実行を続行します。

    このチュートリアルを完了しておめでとうございます。

次のステップ

このチュートリアルでは、デバッガーを起動し、コードをステップ実行し、変数を検査する方法を学習しました。 詳細な情報へのリンクと共に、デバッガーの機能を大まかに見ることができます。