Visual Studio でGitHub Copilotを使用してアプリをデバッグする

この記事では、GitHub Copilotを使用してより効率的にデバッグする方法について説明します。 Copilotでは、コードの修正と、コードのしくみの詳細な分析と説明を提供できます。 バグに対する修正の提案に役立ち、例外などについて説明します。 Copilotは、呼び出し履歴、フレーム、変数名、値について理解します。 その結果、デバッガー対応 AI と対話して、コードや一般的なデバッグ問題に関連する詳細な質問をすることができます。

さらに、Copilotでは、例外などの一部の対象となるシナリオや、デバッグのための AI 強化シナリオで説明されているすべてのシナリオに対して、より正確なヘルプが提供されます。 これらのシナリオのほとんどでは、Ask CopilotボタンまたはScreenshot of Ask Copilot button.Screenshot of Ask Copilot button.Analyze with Copilotボタンを探してください。 これらのシナリオでは、Copilotは質問のコンテキストを既に把握しています。

Visual Studio での GitHub Copilot 入力補完の詳細については、「Visual Studio における GitHub Copilot 入力補完について」を参照してください。

[前提条件]

開始するには、次のものが必要です。

AIが拡張したシナリオ

Copilotは、呼び出し履歴、フレーム、変数名、値について理解します。 その結果、デバッガー対応 AI と対話して、コードや一般的なデバッグ問題に関連する詳細な質問をすることができます。

さらに、Copilotは、次の表に示すような、一部の対象となるシナリオに対してより正確なヘルプを提供します。

機能またはシナリオ リンク
デバッガー エージェント この記事の デバッガー エージェントでのエージェントのバグ解決 を参照してください。 バグを再現し、アプリをインストルメント化し、ライブ ランタイム データを使用して修正を検証するエンドツーエンドのエージェント ワークフロー。
呼び出し履歴の分析 Copilotでコールスタックを分析するを参照してください。 非同期フローの説明など、スレッドの実行内容をワンクリックで分析できます。
例外 この記事の「debug an exception with Copilotを参照してください。 例外に関するヘルプには、デッドロック検出エラーに関するヘルプが含まれます。
変数 AI サポートの取得に関する説明を参照してください。
LINQ クエリ分析 コード エディターでデバッグ中に LINQ クエリにカーソルを合わせると、戻り値が表示されます。 AI の支援を受けるAnalyze with Copilot ボタンを選択します。 LINQ クエリの戻り値の表示を参照してください。
データに関するヒント 「データに関するヒントで AI のサポートを受ける」を参照してください。
条件付きブレークポイントとトレースポイント この記事の「 条件付きブレークポイントとトレースポイントを使用して候補を取得する 」を参照してください。
クイックアクション(電球) クイックアクションで AI のサポートを受けるを参照してください。
IEnumerable タブラービジュアライザー AI サポートの取得に関する説明を参照してください。
テキスト ビジュアライザーでの自動検出と書式設定 自動検出とフォーマットを参照してください。 Copilot はエンコードまたは圧縮された文字列を自動的に識別し、1 回のクリックでデコードします。
インラインの戻り値 メソッド呼び出しの戻り値の表示を参照してください。
インライン値 インライン値の表示を参照してください。
マルチスレッド デバッグ スレッド」ビューで AI アシスタンスを取得するを参照してください
単体テスト テストをデバッグするための AI サポートの取得に関するページを参照してください
リポジトリ コンテキストを使用して例外を検査する リポジトリ コンテキストに関する AI サポートの取得に関する説明を参照してください
ブレークポイントのトラブルシューティング AI サポートの取得に関する説明を参照してください。
機能またはシナリオ リンク
呼び出し履歴の分析 Copilotでコールスタックを分析するを参照してください。 非同期フローの説明など、スレッドの実行内容をワンクリックで分析できます。
例外 この記事の「debug an exception with Copilotを参照してください。 例外に関するヘルプには、デッドロック検出エラーに関するヘルプが含まれます。
変数 AI サポートの取得に関する説明を参照してください。
LINQ クエリ分析 コード エディターでデバッグ中に LINQ クエリにカーソルを合わせると、戻り値が表示されます。 AI の支援を受けるAnalyze with Copilot ボタンを選択します。 LINQ クエリの戻り値の表示を参照してください。
データに関するヒント 「データに関するヒントで AI のサポートを受ける」を参照してください。
条件付きブレークポイントとトレースポイント この記事の「 条件付きブレークポイントとトレースポイントを使用して候補を取得する 」を参照してください。
クイックアクション(電球) クイックアクションで AI のサポートを受けるを参照してください。
IEnumerable タブラービジュアライザー AI サポートの取得に関する説明を参照してください。
インラインの戻り値 メソッド呼び出しの戻り値の表示を参照してください。
インライン値 インライン値の表示を参照してください。
マルチスレッド デバッグ スレッド」ビューで AI アシスタンスを取得するを参照してください
単体テスト テストをデバッグするための AI サポートの取得に関するページを参照してください
リポジトリ コンテキストを使用して例外を検査する リポジトリ コンテキストに関する AI サポートの取得に関する説明を参照してください
ブレークポイントのトラブルシューティング AI サポートの取得に関する説明を参照してください。

ほとんどのシナリオでは、Ask CopilotAsk Copilot button. または Analyze with Copilot ボタンのスクリーンショットを使用して、対象を絞った支援を受けることができます。 Copilotは、質問のコンテキストを既に把握しています。 たとえば、現在のコールスタック、問い合わせているコード行、例外の名前(発生した場合)がわかっているため、チャットでコンテキストを自分で提供する必要はありません。 Copilotでは、条件付きブレークポイントとトレースポイントの使用に関する提案も提供します。

Copilotを使用したデバッグ

次の簡単な例は、インライン チャット ビューを使用して AI アシスタンスを取得する方法を示しています。

View > GitHub Copilot Chat を選択して、個別のチャット ウィンドウを使用してヘルプを表示することもできます。 詳細については、Visual Studio の GitHub Copilot Chat 拡張機能とは何ですか? を参照してください。

デバッグ セッションを開始する

  1. Visual Studioで、新しい C# コンソール アプリを作成します。

    スタート ウィンドウで、[新しいプロジェクト作成] を選択します。 検索ボックスに「console」と入力し、言語として C# を選択し、.NETの Console App を選択します。 [次へ] を選択します。 ConsoleApp_Copilot のようなプロジェクト名を入力し、[次へ] を選択します。

    推奨されるターゲット フレームワークまたは .NET 10 を選択し、Create を選択します。

    .NETの Console App プロジェクト テンプレートが表示されない場合は、Tools>Get Tools and Features に移動し、Visual Studio インストーラーを開きます。 .NETデスクトップ開発ワークロードを選択し、Modify を選択します。

    Visual Studio、コンソール プロジェクトを作成します。コンソール プロジェクトは、右側のウィンドウの Solution Explorer に表示されます。

  2. Program.csのコードを次のコードに置き換えてください。

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            int value = Int32.Parse(args[0]);
            List<String> names = null;
            if (value > 0)
                names = new List<String>();
    
            names.Add("Major Major Major");
        }
    }
    
  3. 次の文を右クリックし、[ブレークポイント>ブレークポイントを挿入] を選択します。

    int value = Int32.Parse(args[0]);
    
  4. F5 キーを押すか、デバッグ メニューから デバッグの開始 を選択します。

    アプリはブレークポイントで一時停止します。 [自動変数] ウィンドウには、args 変数の値が string[0] であることが表示されます。

    Autosウィンドウのスクリーンショット。

  1. コードを右クリックし、[ チャット ] を選択してインライン チャット ビューを開きます。
  1. コードを右クリックし、Ask Copilot を選択してインライン チャット ビューを開きます。

ヒント

または、[自動変数] ウィンドウ、[ローカル] ウィンドウ、またはデータ ヒント内で変数を右クリックして、Ask Copilot を選択します。 変数名とコンテキストがCopilotに提供されるため、チャットで自分でコンテキストを指定する必要はありません。

  1. インラインチャットビューに次の質問を入力します。

    Why does the args variable have a value of string[0]?
    

インライン Copilot Chat のスクリーンショット。

Enter キーを押すと、Copilotはコードの理解に基づいて回答を提供します。 (ここに示されているものとは異なる応答が表示される場合があります。

Copilot によって回答された質問のスクリーンショット

Copilotにコードに対して推奨される修正プログラムがある場合は、それが表示されます。 そうでない場合は、Copilotにコードの提案を依頼できます。

ヒント

インライン チャットで、"#" 記号を使用し、ドロップダウン リストから選択して、特定の情報をCopilotに渡し、質問内で参照します。 たとえば、コードの一部を選択してから「#」と入力すると、 # ドロップダウン リストからその選択を選択できます。 また、"#" 記号を使用して、ドロップダウン リストに表示される IDE 機能 ([ローカル] ウィンドウなど) を参照することもできます。

  1. この例では、Copilot回答の最後までスクロールし、インライン チャット ウィンドウの最後にあるフォローアップの質問を選択します。"引数がプログラムに渡されない場合のケースを処理するにはどうすればよいですか?

    Copilotのフォローアップ質問のスクリーンショット

    Copilotは、コードの修正候補を示しています。

    Copilot によって提案された修正のスクリーンショット

    コード修正プログラムを適用する場合は、[ Tab] を選択します。

  2. Alt + Deleteを選択すると、次のセクションでCopilotの他の機能を引き続き学習できます。

インライン Copilot Chat のスクリーンショット。

Enter キーを押すと、Copilotはコードの理解に基づいて回答を提供します。 (ここに示されているものとは異なる応答が表示される場合があります。

Copilotの回答された質問のスクリーンショット

Copilotにコードに対して推奨される修正プログラムがある場合は、それが表示されます。 そうでない場合は、Copilotにコードの提案を依頼できます。

ヒント

インライン チャットで、"#" 記号を使用し、ドロップダウン リストから選択して、特定の情報をCopilotに渡し、質問内で参照します。 たとえば、コードの一部を選択してから「#」と入力すると、 # ドロップダウン リストからその選択を選択できます。 また、"#" 記号を使用して、ドロップダウン リストに表示される IDE 機能 ([ローカル] ウィンドウなど) を参照することもできます。

  1. この例では、Copilot回答の最後までスクロールし、インライン チャット ウィンドウの最後にあるフォローアップの質問を選択します。"引数がプログラムに渡されない場合のケースを処理するにはどうすればよいですか?

    Copilotのフォローアップ質問のスクリーンショット

    Copilotは、コードの修正候補を示しています。

    Copilotが提案した修正のスクリーンショット。

    コード修正を適用する場合は、[ Accept] (同意する) を選択します。

  2. Cancel を選択すると、次のセクションでCopilotの他の機能を引き続き学習できます。

Copilotを使用して例外をデバッグする

次の簡単な例は、例外が発生したときに AI の支援を受ける方法と、AI が提案する修正に基づいてコードをすばやく更新する方法を示しています。

デバッグ セッションを開始する

  • 同じサンプル アプリを使用してデバッガーで一時停止しているときに、 F11 キーまたは Debug>Step Into キーを押して、現在のステートメントを実行します。

    IndexOutOfRangeExceptionが発生し、アプリが一時停止し、例外が表示されます。

    例外に対する AI の支援を受けるには、次のセクションに進みます。

AIの支援を求める

  1. アプリケーションが例外で一時停止した状態で、Analyze with Copilot ボタンを選択します。

    例外におけるAsk Copilotボタンのスクリーンショット

    まだ開いていない場合は、Copilot Chat ウィンドウが表示され、エラーとその発生理由が評価されます。 この例では、Copilotは、推奨されるコード修正プログラム、コードをコピーするボタン、およびコード修正用の Preview ボタンを識別します。

    例外について質問がある場合は、Ask Copilotテキスト ボックスで質問します。

    Copilot Chat ウィンドウのプレビューボタンのスクリーンショット

  2. [Copilot チャット] ウィンドウで、エラーを防ぐことをCopilotに伝えます。

  3. チャットウィンドウにCopilotの修正候補が表示されたら、Apply を選択します。

  4. 修正候補を確認し、[ Tab] を選択してコード候補を適用します。

    Visual Studio のコード プレビューのスクリーンショット

  5. デバッガーを再起動してください。

    今回は、例外は発生しません。 修正されました!

  1. アプリケーションが例外で一時停止した状態で、Ask Copilot ボタンを選択します。

    例外におけるAsk Copilotボタンのスクリーンショット

    まだ開いていない場合は、Copilot Chat ウィンドウが表示され、エラーとその発生理由が評価されます。 この例では、Copilotは、推奨されるコード修正プログラム、コードをコピーするボタン、およびコード修正用の Preview ボタンを識別します。

    例外について質問がある場合は、Ask Copilotテキスト ボックスで質問します。

  2. プレビュー ボタンを選択します。

    Copilot Chat ウィンドウのプレビューボタンのスクリーンショット

    Visual Studioは、推奨される修正プログラムを含むコード プレビューを示しています。

  3. 提案された修正を確認し、[ 同意する] を選択してコードの提案を適用します。

    Visual Studio のコード プレビューのスクリーンショット

  4. デバッガーを再起動してください。

    今回は、例外は発生しません。 修正されました!

デバッガーエージェントによる能動的なバグ解決

デバッガー エージェントは、静的分析に依存するのではなく、実際のランタイム動作に対してバグを検証するエンド ツー エンドのエージェント ワークフローを提供します。 このエクスペリエンスでは、問題の理解と再現、アプリケーションのインストルメント化、根本原因の分離、ライブ実行による修正の検証など、完全なエージェント ループについて説明します。

GitHubまたはAzure DevOpsの問題から始めたり、自然言語でバグを説明したりできます。 デバッガー エージェントは、問題をローカル のソース コードにマップし、解決の手順を説明します。 デバッグ プロセス中にエージェントと対話して、より多くの入力を提供したり、理論について話し合ったり、修正をリアルタイムで調整したりできます。

デバッガー エージェントを使用するには:

  1. Copilot Chat ウィンドウ (View > GitHub Copilot Chat) を開きます。
  2. チャット ウィンドウの左下隅にあるモード ドロップダウンから [デバッガー ] を選択します。
  3. GitHubまたはAzure DevOps問題のリンクを指定するか、自然言語でバグを説明します。

Visual Studio のカスタム エージェントを含むエージェント ピッカーを示すスクリーンショット

デバッガー エージェントは、次の手順で動作します。

  • コンテキスト挿入 - 問題またはバグの説明をローカル ソース コードに接続します。
  • 自律再現 機能 - バグを分析し、再現手順がない場合は、エラーをトリガーする最小限のシナリオを作成します。
  • 仮説とインストルメンテーション - エラーの仮説を生成し、トレースポイントと条件付きブレークポイントを使用してアプリをインストルメント化し、ランタイム状態をキャプチャします。
  • ランタイム検証 - デバッグ セッションを実行し、ライブ テレメトリを分析して根本原因を特定します。
  • ターゲット修正 - 広範なリファクタリングではなく、正確な障害点での正確な修正を提案します。
  • 最終的な人間による検証 - シナリオを再実行し、エージェントと共にライブ環境で修正を確認します。

チャットでエージェント モードの場合は、チャット入力で @debugger を使用してデバッガー エージェントに切り替えることもできます。 デバッガー エージェントとその他の組み込みエージェントの詳細については、「組み込みエージェントとカスタム エージェントを GitHub Copilotで使用する」を参照してください。

条件付きブレークポイントとトレースポイントで候補を取得

Copilotでは、コードに固有のコンディショナルブレークポイントトレースポイントの候補を示します。

この例では、条件付きブレークポイントの AI 提案を示しています。 トレースポイントの場合、AIアシスタンスも同様に機能します。

  1. 現在のブレークポイントを削除するには、ブレークポイントをクリックするか、右クリックして [ブレークポイントの削除]を選択します。

  2. 次のコード行を置き換えます。

    names.Add("Major Major Major");
    

    これと:

    // names.Add("Major Major Major");
    foreach (var item in args)
    {
       names.Add("Name: " + item);
    }
    
  3. names.Add("Name: " + item) ステートメントの左側で、余白を右クリックし、[条件付きブレークポイントの挿入] を選択します。

  4. 式フィールドを選択すると、Copilotが提案の処理を開始します。

    Copilotが条件付きブレークポイントの提案を行っているスクリーンショット。

  1. 候補が表示されたら、 item == "Test"などの候補を選択します。 名前が Fred になるように提案を編集します。

    Copilotが提案した条件付きブレークポイントのスクリーンショット。

  1. 候補が表示されたら、 item == "John" などのいずれかを選択します。 名前が Fred になるように提案を編集します。

    Copilotの提案する条件付きブレークポイントのスクリーンショット。

  1. 条件式をテストするには:

    1. Solution Explorerで ConsoleApp_Copilot プロジェクトを右クリックし、 Propertiesを選択します。

    2. [デバッグ] を選択します>一般>デバッグ起動プロファイル UI を開きます。

    3. [Command-line arguments] フィールドに、3 行に分けて 5 Fred Joe を入力します。

      プロジェクトのコマンドライン引数を入力するスクリーンショット。

    4. デバッガーを再起動してください。

    デバッガーがブレークポイントで一時停止したら、 item の値を確認し、現在の値が Fred であることを確認します。