Visual Studio Code の .NET デバッガーについて

完了

前のユニットで、デバッガはプログラムの実行を制御し、その状態を観察するのに役立つことを学びました。 このセクションでは、Visual Studio Code でこれらのタスクの両方を実行する方法について説明します。

まず、Visual Studio Code デバッガーを .NET で使用するように構成する方法について説明します。

.NET デバッグ用に Visual Studio Code を構成する

Visual Studio Code で C# ファイルを初めて開くと、C# の推奨される拡張機能をインストールするように求めるプロンプトが表示されます。

C# 拡張機能のインストールを促す Visual Studio Code のプロンプトのスクリーンショット。

Visual Studio Code によって C# 拡張機能がインストールされ、プロジェクトのビルドとデバッグに必要な資産を追加するためのプロンプトが表示されます。

.NET プロジェクトのビルドとデバッグに必要なアセットの追加を促す Visual Studio Code のプロンプトのスクリーンショット。

Visual Studio Code での C# 言語のサポートは、 Marketplace からのオプションのインストールです。 まだ C# ファイルを開いていない場合は、Visual Studio Code によってこの拡張機能のインストールを求めるメッセージが自動的に表示されます。 Visual Studio Code で .NET アプリケーションのビルドまたはデバッグで問題が発生した場合は、プロジェクトに C# 言語サポート に必要な資産があることを確認する必要 があります。

ブレークポイント

前のユニットで学習したように、デバッガーはプログラムの実行の分析と制御に役立ちます。 Visual Studio Code デバッガーを起動すると、すぐにコードの実行が開始されます。 コードの実行は速いので、任意のステートメントでプログラムを一時停止できる必要があります。 ブレークポイントを使用してこれを行います。

Visual Studio Code でブレークポイントを追加するには、中断する行の行番号の左側をクリックします。 ブレークポイントが有効になると、赤い円が表示されます。 削除するには、赤い円をもう一度選択します。

Visual Studio Code エディター ウィンドウに追加されたブレークポイントのスクリーンショット。

右クリックしてブレークポイントを追加する場合は、[ 条件付きブレークポイントの追加] を選択することもできます。 この特殊な種類のブレークポイントを使用すると、実行を中断するための 条件 を入力できます。 このブレークポイントは、指定した条件が満たされた場合にのみアクティブになります。 既存のブレークポイントを右クリックし、[ブレークポイントの 編集] を選択して変更することもできます。

Visual Studio Code で条件付きブレークポイントを設定するスクリーンショット。

Visual Studio Code デバッガーの概要

ブレークポイントを設定してアプリを起動すると、新しい情報パネルとコントロールが画面に表示されます。

Visual Studio Code デバッガーの概要のスクリーンショット。

  1. デバッガー起動コントロール
  2. 変数の状態
  3. 監視対象の変数の状態
  4. 現在のコールスタック
  5. ブレークポイント
  6. 実行コントロール
  7. 現在の実行ステップ
  8. デバッグ コンソール

デバッガー起動コントロール

サイドバーの上部には、起動コントロールがあります。

Visual Studio Code デバッグ サイドバー コントロールのスクリーンショット。

  1. デバッグを開始します。
  2. アクティブな起動構成を選択します。
  3. launch.json ファイルを編集します。 必要なら作ればいいよ。
  4. デバッグ ターミナルを開きます。

変数の状態を表示および編集する

プログラムの欠陥の原因を分析するときは、変数の状態を監視して、予期しない変更を探します。 これを行うには、[ 変数] パネルを使用できます。

変数はスコープ別に整理されて表示されます。

  • ローカル変数: 現在のスコープ (通常は現在の関数) でアクセスできます。
  • グローバル変数: プログラム内のあらゆる場所からアクセスできます。 JavaScript ランタイムのシステム オブジェクトも含まれているため、そこに多くのものが表示されても驚かないでください。
  • クロージャ変数: 現在のクロージャからアクセス可能 (存在する場合)。 クロージャは、関数のローカル スコープと、その関数が属する外部関数のスコープを結合します。

スコープと変数を展開するには、矢印を選択します。 オブジェクトを展開すると、オブジェクトで定義されているすべてのプロパティを確認できます。

変数をダブルクリックすると、その場で変数の値を変更できます。

エディター ウィンドウで関数のパラメーターまたは変数を直接ポイントすることにより、その値を見ることもできます。

デバッグ中の変数ホバーのスクリーンショット。

監視変数

時間や異なる関数を追跡するたびに、変数の状態を検索するのは面倒な場合があります。 ここで 、[ウォッチ ] パネルが役立ちます。

[プラス] ボタンを選択して、変数名またはウォッチする式を入力できます。 別の方法として、[ 変数 ] パネルで変数を右クリックし、[ ウォッチする変数を追加] を選択することもできます。

ウォッチ パネル内のすべての式は、コードの実行時に自動的に更新されます。

コールスタック

プログラムで関数に入るたびに、エントリが呼び出し履歴に追加されます。 アプリケーションが複雑になり、関数内で何度も関数が呼び出されると、呼び出し履歴は関数呼び出しの証跡を表します。

これは例外の原因を見つけるのに役立ちます。 プログラムで予期しないクラッシュが発生した場合は、次の例のようにコンソールに表示されることがよくあります。

Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
   at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9

エラー メッセージの下の at [...] 行のグループは、"スタック トレース" と呼ばれます。 スタック トレースにより、例外が発生する前に呼び出されたすべての関数の名前と始点が示されます。 .NET ランタイムの内部関数も含まれているため、解読が少し難しい場合があります。

その場合は、Visual Studio Code の [呼び出し履歴] パネルが便利です。 また、不要な情報をフィルターで除外して、独自のコードから関連する関数だけが既定で表示されます。 次に、この呼び出し履歴をアンワインドして、例外の発生元を調べることができます。

[ブレークポイント] パネル

[ ブレークポイント ] パネルでは、コードに配置したすべてのブレークポイントを表示および切り替えることができます。 また、キャッチされた、あるいはキャッチされていない例外で中断するようにオプションを切り替えることもできます。 [ブレークポイント] パネルを使用して、プログラムの状態を調べ、発生時に [呼び出し履歴] を使用して例外の発生元を追跡できます。

実行を制御する

これらのコントロールを使用して、プログラムの実行フローを制御できます。

Visual Studio Code デバッガー実行コントロールのスクリーンショット。

左から右にコントロールは次のとおりです。

  • 実行を続行または一時停止する: 実行が一時停止されている場合は、次のブレークポイントにヒットするまで続行されます。 プログラムが実行中の場合は、このボタンが一時停止ボタンに切り替わり、実行を一時停止することができます。
  • ステップ オーバー: 現在のコンテキストで次のコード ステートメントを実行します。
  • ステップ イン: ステップ オーバーと同様ですが、次のステートメントが関数呼び出しの場合は、この関数の最初のコード ステートメント ( step コマンドと同じ) に進みます。
  • ステップ アウト: 関数内にいる場合は、この関数の残りのコードを実行し、最初の関数呼び出しの後にステートメントに戻ります ( out コマンドと同じです)。
  • 再起動: 最初からプログラムを再起動します。
  • 停止: 実行を終了し、デバッガーを終了します。

デバッグ コンソールを使用する

Windows および Linux の場合は、 Ctrl + Shift + Y キーを押して、デバッグ コンソールの表示と非表示を切り替えることができます。 Mac の Cmd + Shift + Y を 選択します。 デバッグ コンソールを使用して、アプリケーション コンソールのログを視覚化できます。 また、組み込みの .NET デバッガーのコマンドや変数名など、式を評価したり、現在の実行コンテンツでコードを実行したりすることもできます。

デバッグ コンソールの下部にある入力フィールドに .NET 式を入力し、 Enter キーを押して評価できます。 結果はコンソールに直接表示されます。

Visual Studio Code デバッグ コンソールのスクリーンショット。

デバッグ コンソールを使用すると、変数の値をすばやく確認したり、異なる値を持つ関数をテストしたり、現在の状態を変更したりできます。

デバッグ コンソールは .NET コードの実行と評価に非常に役立ちますが、デバッグ コンソールが実行中のプログラムのターミナル入力を受け入れないので、.NET コンソール アプリケーションを実行またはデバッグしようとすると、少し混乱する可能性があります。

デバッグ中にターミナル入力を処理するには、統合ターミナル (Visual Studio Code ウィンドウのいずれか) または外部ターミナルを使用できます。 このチュートリアルでは、統合ターミナルを使用します。

  1. .vscode/launch.jsonを開きます。

  2. consoleの設定を次の場所からintegratedTerminalに変更します。

    "console": "internalConsole",
    

    宛先:

    "console": "integratedTerminal",
    
  3. 変更を保存します。

次のユニットでは、デバッガーを使用して、前に見たフィボナッチ コードのバグを修正する方法について説明します。