次の方法で共有


例外ヘルパーを使用して例外を検査する

例外に対処することは、テクノロジや専門知識のレベルに関係なく、一般的な問題です。 例外がコードで問題を引き起こしている理由を把握するのは、イライラする経験になる可能性があります。 Visual Studioで例外をデバッグする場合は、問題をより迅速にデバッグできるように、関連する例外情報を提供することで、そのフラストレーションを軽減したいと考えています。

例外ヘルパー

例外時に一時停止する

デバッガーが例外で中断すると、そのコード行の右側に例外エラー アイコンが表示されます。 非モーダル例外ヘルパーが例外アイコンの近くに表示されます。

コード行Exception helper next to a line of codeコード行の隣の例外ヘルパーの横にある例外ヘルパーをする

例外情報を検査する

例外ヘルパーで例外の種類と例外メッセージをすぐに読み取ることができ、例外がスローされたか、ハンドルされなかったかを確認できます。 [詳細の表示] リンクをクリックすると、Exception オブジェクトのプロパティを調べて表示できます。

null 参照を分析する

Visual Studio 2017 以降、.NETと C/C++ コードの両方で、NullReferenceException または AccessViolation にヒットすると、例外ヘルパーに null 分析情報が表示されます。 分析は、例外メッセージの下にテキストとして表示されます。 次の図では、情報は "s が null でした" と表示されています。

例外ヘルパーにおける null の解析

手記

マネージド コードでの null 参照分析には、バージョン 4.6.2 .NET必要です。 現在、null 分析は、Universal Windows Platform (UWP)およびその他の .NET Core アプリケーションではサポートされていません。 Just-In-Time (JIT) コードの最適化がないコードのデバッグ中にのみ使用できます。

例外設定を構成する

例外ヘルパーの [例外設定] セクションでは、現在の種類の例外がスローされたときに中断するようにデバッガーを構成できます。 デバッガーがスローされた例外で一時停止している場合、このチェックボックスを使って、将来その例外タイプがスローされた際に中断を無効化できます。 この特定のモジュールでこの特定の例外がスローされたときに中断しないようにする場合は、 [例外設定] ウィンドウの [次からスローされた場合を除く:] でモジュール名のチェック ボックスをオンにします。

内部例外を検査する

例外に内部例外 (InnerException) がある場合は、例外ヘルパーでそれらを表示できます。 複数の例外が存在する場合は、呼び出し履歴の上に示されている左右の矢印を使用して、それらの間を移動できます。

例外ヘルパー 例外ヘルパーと内部例外を持つ

再スローされた例外を調べる

例外が thrown されている場合、例外ヘルパーには例外が初めてスローされたときからの呼び出し履歴が表示されます。 例外が複数回スローされた場合は、元の例外からの呼び出し履歴のみが表示されます。

例外ヘルパーと再スローされた例外

非同期例外を検査する (.NET)

.NET 9 以降では、非同期タスク メソッドが .NET フレームワーク コード内で例外をスローした場合、Visual Studio デバッガーが自動的に中断されます。 これにより、非同期コード (特に ASP.NET) のデバッグが容易になります。例外は非同期境界を越えてスローされることが多いためです。

非同期メソッドを使用した例外ヘルパーのスクリーンショット。

呼び出し履歴を表示する

Visual Studio 2022 バージョン 17.3 以降では、[呼び出し履歴] ウィンドウ内に例外スタック フレームを表示できます。 非同期例外の場合、これにより、シンボルをすばやく読み込んだり、ソースを見つけたり、例外のサイトに直接移動したりする機能が追加されます。 [呼び出し履歴ウィンドウ内のスタックフレームは、自動ナビゲーション、フレーム間の迅速な切り替え、シンボルの読み込み、逆コンパイル オプションなどの標準的な呼び出し履歴の機能を提供し、例外がスローされたソースコードに戻ることができます。

呼び出し履歴を含む例外ヘルパー を使用した例外ヘルパー

AI のサポートを受ける

Copilotがある場合は、例外のデバッグ中に AI の支援を受けることができます。 Copilotで分析またはCopilotに聞くボタンを探します「Copilotに聞く」ボタンのスクリーンショット。 これらのシナリオでは、Copilotは質問のコンテキストを既に認識しているため、チャットで自分でコンテキストを提供する必要はありません。 詳細については、「Debug with Copilot」を参照してください。

Copilot問題の分析に役立つ出力ウィンドウ コンテキストにアクセスする必要がある場合は、チャット ウィンドウでこのアクセス許可を求められます。 アクセス許可を付与する場合は、ランタイムの詳細に基づいて例外の追加分析を実行するCopilotを有効にします。 例外ヘルパー、変数分析、コード検査、およびその他のデバッグ シナリオは、現在のデバッグ セッションでこのコンテキストにアクセスできます。

リポジトリ コンテキストで AI の支援を受ける

Azure DevOps リポジトリを使用してVisual Studioで作業している場合、Copilotを使用した例外分析には、よりスマートで高速で正確な例外解決のためのリポジトリ コンテキストが組み込まれています。 Copilot、過去のバグ、問題、プル要求、履歴修正など、オープン リポジトリを相互参照して、コードベースに直接関連する実用的な分析情報を提供します。

例外が発生した場合:

  • Copilotは、最も可能性の高い根本原因、影響を受けたコンポーネント、および潜在的な修正プログラムを特定します。
  • Copilotでは、リポジトリの知識を活用して、過去の同様の問題とその解決策を強調し、既存の修正プログラムから学習するのに役立ちます。
  • 複雑な例外は完全なコンテキストで分析され、ランタイムの動作が履歴パターンに接続されるため、予期しない値や正しくない値をすばやく理解できます。
  • 関連する修正と分析情報を自動的に表示することで、Copilot時間を節約し、多くの場合、困難な問題をデバッグするために必要な試用とエラーを削減します。

1 つの例外を超えてエンドツーエンドの診断を必要とする複雑なバグの場合は、デバッガー エージェントを使用できます。 デバッガー エージェントは、ライブ ランタイム データを使用して修正を再現、インストルメント化、検証するエージェントワークフローを提供します。 詳細については、「 デバッガー エージェントを使用したエージェントのバグ解決」を参照してください。

Live Share でデバッグ セッションを共有する

[Live Share セッションを開始] リンクを使用して、例外ヘルパーから Live Share セッションを開始できます。Live Share セッションに参加しているすべてのユーザーは、他のすべてのデバッグ情報と共に例外ヘルパーを見ることができます。