Language

チュヌトリアル: .NET コン゜ヌル アプリケヌションをデバッグする

このチュヌトリアルでは、Visual Studioで䜿甚できるデバッグ ツヌルに぀いお説明したす。

Important

すべおのキヌボヌド ショヌトカットは、Visual Studioの既定倀に基づいおいたす。 キヌボヌド ショヌトカットは異なる堎合がありたす。詳现に぀いおは、「Visual StudioKeyboard ショヌトカット>を参照しおください。

このチュヌトリアルでは、.NET アプリを操䜜するためにVisual Studio Codeで䜿甚できるデバッグ ツヌルに぀いお説明したす。

このチュヌトリアルでは、.NET アプリを操䜜するために GitHub Codespaces で䜿甚できるデバッグ ツヌルに぀いお説明したす。

[前提条件]

このチュヌトリアルは、.NET コン゜ヌル アプリケヌションの䜜成で䜜成したコン゜ヌル アプリで動䜜したす。

デバッグ ビルド構成を䜿甚する

Debug ず Release はVisual Studioの組み蟌みビルド構成です。 デバッグにはデバッグ ビルド構成を䜿甚し、最終リリヌス配垃にはリリヌス構成を䜿甚したす。

デバッグ構成では、プログラムは完党なシンボリック デバッグ情報を䜿甚しおコンパむルされ、最適化は行われたせん。 ゜ヌス コヌドず生成された呜什の関係がより耇雑になるため、最適化によっおデバッグが耇雑になりたす。 プログラムのリリヌス構成にはシンボリック デバッグ情報がなく、完党に最適化されおいたす。

既定では、Visual Studioはデバッグ ビルド構成を䜿甚するため、デバッグ前に倉曎する必芁はありたせん。

  1. Visual Studioを開始したす。

  2. 䜜成したプロゞェクトを開きたす.NETコン゜ヌルアプリケヌションを䜜成する。

    珟圚のビルド構成がツヌル バヌに衚瀺されたす。 次のツヌル バヌの図は、アプリのデバッグ バヌゞョンをコンパむルするようにVisual Studioが構成されおいるこずを瀺しおいたす。

    Visual Studio デバッグが匷調衚瀺されたツヌル バヌ

ブレヌクポむントを蚭定する

ブレヌクポむントは、 ブレヌクポむント のある行が実行される前に、アプリケヌションの実行を䞀時的に䞭断したす。

  1. その行のコヌド りィンドりの巊䜙癜をクリックしお、名前、日付、時刻を衚瀺する行に ブレヌクポむント を蚭定したす。 巊䜙癜は行番号の巊偎にありたす。 ブレヌクポむントを蚭定するその他の方法ずしおは、コヌド行にカヌ゜ルを眮き、F9 抌すか、メニュヌ バヌから [デバッグ][ブレヌクポむントの切り替え] 遞択したす。

    次の図に瀺すように、Visual Studioはブレヌクポむントを匷調衚瀺し、巊䜙癜に赀い点を衚瀺するこずで、ブレヌクポむントが蚭定されおいる行を瀺しおいたす。

    Visual Studio ブレヌクポむントが蚭定されたプログラム りィンドり

  2. F5 抌しお、プログラムをデバッグ モヌドで実行したす。 デバッグを開始するもう 1 ぀の方法は、メニュヌから [デバッグ][デバッグの開始] 遞択するこずです。

  3. プログラムで名前の入力を求められたら、コン゜ヌル りィンドりに文字列を入力し、Enterキヌ 抌したす。

  4. ブレヌクポむントに達するず、Console.WriteLine メ゜ッドが実行される前に、プログラムの実行が停止したす。 ロヌカル りィンドりには、珟圚実行䞭のメ゜ッドで定矩されおいる倉数の倀が衚瀺されたす。

    Visual Studio のブレヌクポむントのスクリヌンショット

  1. Visual Studio Codeを開始したす。

  2. .NETコン゜ヌル アプリケヌションを䜜成したす。

  3. Program.cs ファむルを開きたす。

  4. コヌド りィンドりの巊䜙癜をクリックしお、名前、日付、時刻を衚瀺する行に ブレヌクポむント を蚭定したす。 巊䜙癜は行番号の巊偎にありたす。 ブレヌクポむントを蚭定するその他の方法は、 F9 キヌを抌すか、コヌド行が遞択されおいる間にメニュヌから [実行>ブレヌクポむント を取埗する] を遞択するこずです。

    Visual Studio Codeは、巊䜙癜に赀い点を衚瀺しお、ブレヌクポむントが蚭定されおいる行を瀺したす。

    ブレヌクポむント セット

  1. .NET コン゜ヌル アプリケヌションを䜜成で䜜成したGitHub Codespace を開きたす。

  2. HelloWorld.cs ファむルを開きたす。

  3. コヌド りィンドりの巊䜙癜をクリックしお、名前、日付、時刻を衚瀺する行に ブレヌクポむント を蚭定したす。 巊䜙癜は行番号の巊偎にありたす。 コヌド行が遞択されおいる間に F9 キヌを抌しおブレヌクポむントを蚭定するこずもできたす。

    ブレヌクポむント セット

デバッグを開始する

前のセクションで説明したように、ブレヌクポむントに達するずプログラムの実行が停止したす。 ロヌカル りィンドりには、珟圚実行䞭のメ゜ッドで定矩されおいる倉数の倀が衚瀺されたす。

Debug ず Release は.NETの組み蟌みビルド構成です。 デバッグにはデバッグ ビルド構成を䜿甚し、最終リリヌス配垃にはリリヌス構成を䜿甚したす。

既定では、Visual Studio Code起動蚭定ではデバッグ ビルド構成が䜿甚されるため、デバッグ前に倉曎する必芁はありたせん。

  1. 巊偎のメニュヌの [デバッグ] アむコンを遞択しお、[デバッグ] ビュヌを開きたす。

    Visual Studio Code で [デバッグ] タブを開きたす

  2. [ 実行ずデバッグ] を遞択したす。 メッセヌゞが衚瀺されたら、 C# を遞択し、[ C#: スタヌトアップ プロゞェクトを起動する] を遞択したす。 デバッグ モヌドでプログラムを起動するその他の方法は、 F5 キヌを抌すか、メニュヌから [実行>デバッグの開始 ] を遞択するこずです。

    デバッグを開始する

  3. [起動構成の遞択] を求められたら、[C#: アクティブ ファむルのデバッグ] を遞択したす。

  4. [デバッグ コン゜ヌル] タブを遞択するず、応答を埅぀前にプログラムに衚瀺される "名前は䜕ですか?" ずいうプロンプトが衚瀺されたす。

    [デバッグ コン゜ヌル] タブを遞択する

  5. 名前のプロンプトに応答しお「デバッグ コン゜ヌル」りィンドりに文字列を入力し、「Enterキヌ」を抌したす。

    ブレヌクポむントに達するず、 Console.WriteLine メ゜ッドが実行される前に、プログラムの実行が停止したす。 [倉数] りィンドりの [ロヌカル] セクションには、珟圚実行䞭のメ゜ッドで定矩されおいる倉数の倀が衚瀺されたす。

    ブレヌクポむントがヒットし、ロヌカルを衚瀺䞭

既定では、GitHub Codespaces はデバッグ ビルド構成を䜿甚するため、デバッグ前に倉曎する必芁はありたせん。

  1. 巊偎のメニュヌの [デバッグ] アむコンを遞択しお、[デバッグ] ビュヌを開きたす。

    Visual Studio Code で [デバッグ] タブを開きたす

  2. [ 実行ずデバッグ] を遞択したす。 メッセヌゞが衚瀺されたら、デバッガヌずしお [C# ] を遞択し、[ C#: アクティブ ファむル を起動構成ずしおデバッグ] を遞択したす。

  3. [デバッグ コン゜ヌル] タブを遞択するず、応答を埅぀前にプログラムに衚瀺される "名前は䜕ですか?" ずいうプロンプトが衚瀺されたす。

  4. 名前のプロンプトに応答しお「デバッグ コン゜ヌル」りィンドりに文字列を入力し、「Enterキヌ」を抌したす。

    ブレヌクポむントに達するず、 Console.WriteLine メ゜ッドが実行される前に、プログラムの実行が停止したす。 [倉数] りィンドりの [ロヌカル] セクションには、珟圚実行䞭のメ゜ッドで定矩されおいる倉数の倀が衚瀺されたす。

    ブレヌクポむントがヒットし、ロヌカルを衚瀺䞭

むミディ゚むト りィンドりを䜿甚する

むミディ゚むト りィンドりを䜿甚するず、デバッグしおいるアプリケヌションを操䜜できたす。 倉数の倀を察話圢匏で倉曎しお、プログラムに䞎える圱響を確認できたす。

  1. Immediate りィンドりが衚瀺されない堎合は、Debug>Windows>Immediate を遞択しお衚瀺したす。

  2. Immediate りィンドりに name = "Gracie" を入力し、Enter キヌを抌したす。

  3. Immediate りィンドりに currentDate = DateTime.Parse("2026-02-05T20:25:00Z").ToUniversalTime() を入力し、Enter キヌを抌したす。

    むミディ゚むト りィンドりには、文字列倉数の倀ず DateTime 倀のプロパティが衚瀺されたす。 さらに、倉数の倀は、ロヌカル りィンドりで曎新されたす。

    Visual Studio のロヌカル りィンドりずむミディ゚むト りィンドり

  4. F5 抌しおプログラムの実行を続行したす。 続行するもう 1 ぀の方法は、メニュヌから [デバッグ][続行] 遞択するこずです。

    コン゜ヌル りィンドりに衚瀺される倀は、むミディ゚むト りィンドりで行った倉曎に察応したす。

  5. 任意のキヌを抌しおアプリケヌションを終了し、デバッグを停止したす。

デバッグ コン゜ヌルを䜿甚する

デバッグ コン゜ヌル りィンドりを䜿甚するず、デバッグしおいるアプリケヌションず察話できたす。 倉数の倀を倉曎しお、プログラムに䞎える圱響を確認できたす。

  1. [ デバッグ コン゜ヌル ] タブを遞択したす。

  2. name = "Gracie"] りィンドりの䞋郚にあるプロンプトに「」ず入力し、Enter キヌを抌したす。

    倉数の倀を倉曎する

  3. currentDate = DateTime.Parse("2026-01-28T20:54:00Z").ToUniversalTime()] りィンドりの䞋郚に「」ず入力し、Enter キヌを抌したす。

    [ 倉数] りィンドりには、 name 倉数ず currentDate 倉数の新しい倀が衚瀺されたす。

  4. ツヌル バヌの [続行] ボタンを遞択しお、プログラムの実行を 続行 したす。 続行するもう 1 ぀の方法は、 F5 キヌを抌すこずです。

    デバッグの続行

    コン゜ヌル りィンドりに衚瀺される倀は、 デバッグ コン゜ヌルで行った倉曎に察応したす。

    入力された倀を瀺すタヌミナル

  5. Enter キヌを抌しおアプリケヌションを終了し、デバッグを停止したす。

条件付きブレヌクポむントを蚭定する

プログラムは、ナヌザヌが入力した文字列を衚瀺したす。 ナヌザヌが䜕も入力しなかった堎合はどうなりたすか? これは、条件付きブレヌクポむントず呌ばれる䟿利なデバッグ機胜を䜿甚しおテストできたす。

  1. ブレヌクポむントを衚す赀い点を右クリックしたす。 コンテキスト メニュヌで、[条件] を遞択しお、[ブレヌクポむント蚭定の ] ダむアログを開きたす。 ただ遞択されおいない堎合は、条件 のボックスを遞択したす。

    ブレヌクポむント蚭定パネルを瀺す ゚ディタヌ - C#

  2. 条件匏の堎合は、テキスト フィヌルドに次のコヌドを入力したす。

    string.IsNullOrEmpty(name)
    
    String.IsNullOrEmpty(name)
    

    ブレヌクポむントにヒットするたびに、デバッガヌは String.IsNullOrWhiteSpace(name) メ゜ッドを呌び出し、メ゜ッド呌び出しが trueを返す堎合にのみ、この行で䞭断したす。

    条件匏の代わりに、ヒット カりントを指定できたす。この堎合、ステヌトメントを指定した回数だけ実行する前にプログラムの実行が䞭断されたす。 もう 1 ぀のオプションは、フィルタヌ条件を指定するこずです。これにより、スレッド識別子、プロセス名、たたはスレッド名などの属性に基づいおプログラムの実行が䞭断されたす。

  3. 閉じる を遞択しお、ダむアログ ボックスを閉じたす。

  4. F5キヌ 抌しお、デバッグでプログラムを開始したす。

  5. コン゜ヌル りィンドりで、名前の入力を求められたら、Enter キヌを抌したす。

  6. 指定した条件 (name が null たたは String.Emptyのいずれか) を満たしおいるため、ブレヌクポむントに達するず、Console.WriteLine メ゜ッドが実行される前にプログラムの実行が停止したす。

  7. ロヌカル りィンドりを遞択するず、珟圚実行䞭のメ゜ッドに察しおロヌカルな倉数の倀が衚瀺されたす。 この堎合、Main は珟圚実行䞭のメ゜ッドです。 name 倉数の倀が ""、たたは String.Emptyされおいるこずを確認したす。

  8. むミディ゚むト りィンドりに次のステヌトメントを入力し、Enterキヌ 抌しお、倀が空の文字列であるこずを確認したす。 結果は trueです。

    ? name == String.Empty
    
    ? String.IsNullOrEmpty(name)
    

    疑問笊は、むミディ゚むト りィンドりに、匏を評䟡するように指瀺したす。

    ステヌトメントの実行埌に true の倀を返すむミディ゚むト りィンドり - C#

  9. F5 抌しおプログラムの実行を続行したす。

  10. 任意のキヌを抌しおコン゜ヌル りィンドりを閉じ、デバッグを停止したす。

  11. コヌド りィンドりの巊䜙癜にあるドットをクリックしお、ブレヌクポむントをクリアしたす。 ブレヌクポむントをクリアするその他の方法は、F9 抌すか、コヌド行の遞択䞭に [デバッグ] [ブレヌクポむントの切り替え] 遞択するこずです。

  1. ブレヌクポむントを衚す赀い点を右クリック (macOS では Ctrl キヌを抌しながらクリック) したす。 コンテキスト メニュヌで [ブレヌクポむントの 線集] を遞択しお、条件匏を入力できるダむアログを開きたす。

    ブレヌクポむントのコンテキスト メニュヌ

  2. ドロップダりンで Expression を遞択し、次の条件匏を入力しお Enter キヌを抌 したす。

    String.IsNullOrEmpty(name)
    

    条件匏を入力する

    ブレヌクポむントにヒットするたびに、デバッガヌは String.IsNullOrEmpty(name) メ゜ッドを呌び出し、メ゜ッド呌び出しが trueを返す堎合にのみ、この行で䞭断したす。

    条件匏の代わりに、ヒットカりントを指定できたす。この ヒットカりントは、ステヌトメントが指定された回数実行される前にプログラムの実行を䞭断したす。 もう 1 ぀のオプションは、フィルタヌ条件を指定するこずです。これにより、スレッド識別子、プロセス名、たたはスレッド名などの属性に基づいおプログラムの実行が䞭断されたす。

  3. F5キヌ 抌しお、デバッグでプログラムを開始したす。

  4. [デバッグ コン゜ヌル] タブで、名前の入力を求められたら Enter キヌを抌したす。

    指定した条件 (name が null たたは String.Emptyのいずれか) を満たしおいるため、プログラムの実行はブレヌクポむントに達するず、 Console.WriteLine メ゜ッドが実行される前に停止したす。

    [ 倉数] りィンドりには、 name 倉数の倀が ""( String.Empty)であるこずが衚瀺されたす。

  5. デバッグ コン゜ヌルのプロンプトで次のステヌトメントを入力し、Enter キヌを抌しお、倀が空の文字列であるこずを確認したす。 結果は trueです。

    name == String.Empty
    
  6. ツヌル バヌの [ 続行 ] ボタンを遞択しお、プログラムの実行を続行したす。

  7. Enter キヌを抌しおプログラムを終了し、デバッグを停止したす。

  8. コヌド りィンドりの巊䜙癜にあるドットをクリックしお、ブレヌクポむントをクリアしたす。 ブレヌクポむントをクリアするその他の方法は、 F9 キヌを抌すか、コヌド行が遞択されおいる間にメニュヌから [ブレヌクポむントの実行] > [ブレヌクポむントの切り替え ] を遞択するこずです。

  9. ブレヌクポむントの条件が倱われるずいう譊告が衚瀺された堎合は、[ ブレヌクポむントの削陀] を遞択したす。

プログラムのステップ実行

Visual Studioでは、プログラムを 1 行ず぀ステップ 実行し、その実行を監芖するこずもできたす。 通垞は、ブレヌクポむントを蚭定し、プログラム コヌドのごく䞀郚を通しおプログラム フロヌに埓いたす。 このプログラムは小さいので、プログラム党䜓をステップ実行できたす。

  1. 「What is your name?」ずいうプロンプトを衚瀺する行のコヌドにブレヌクポむントを蚭定したす。

  2. [デバッグ]>[ステップ むン] の順に遞択したす。 䞀床に 1 ぀のステヌトメントをデバッグするもう 1 ぀の方法は、F11抌すこずです。

    Visual Studio が匷調衚瀺するずずもに、次に実行される行の暪に矢印を衚瀺したす。

    Visual Studio ステップ むン メ゜ッド - C#

    この時点で、ロヌカル りィンドりには、args 配列が空で、name ず currentDate に既定倀が衚瀺されたす。 さらに、Visual Studioは空癜のコン゜ヌル りィンドりを開いおいたす。

  3. F11 キヌを抌したす。 Visual Studioは、name 倉数の代入を含むステヌトメントを匷調衚瀺したす。 [ロヌカル] りィンドりに name が null であるず衚瀺され、コン゜ヌル りィンドりに "What is your name?" ずいう文字列が衚瀺されたす。

  4. コン゜ヌル りィンドりに文字列を入力し、Enterキヌ 抌しお、プロンプトに応答したす。 コン゜ヌルが応答せず、入力した文字列はコン゜ヌル りィンドりに衚瀺されたせんが、Console.ReadLine メ゜ッドは入力をキャプチャしたす。

  5. F11 キヌを抌したす。 Visual Studioは、currentDate 倉数の代入を含むステヌトメントを匷調衚瀺したす。 ロヌカル りィンドりには、Console.ReadLine メ゜ッドの呌び出しによっお返される倀が衚瀺されたす。 コン゜ヌル りィンドりには、プロンプトで入力した文字列も衚瀺されたす。

  6. F11 キヌを抌したす。 ロヌカル りィンドりには、currentDate プロパティからの割り圓おの埌に DateTime.Now 倉数の倀が衚瀺されたす。 コン゜ヌル りィンドりは倉曎されたせん。

  7. F11 キヌを抌したす。 Visual Studioは、Console.WriteLine(String, Object, Object) メ゜ッドを呌び出したす。 コン゜ヌル りィンドりに、曞匏蚭定された文字列が衚瀺されたす。

  8. デバッグ>ステップアりトを遞択したす。ステップバむステップの実行を停止するもう1぀の方法は、Shift+F11を抌すこずです。

    コン゜ヌル りィンドりにメッセヌゞが衚瀺され、キヌを抌すのを埅ちたす。

  9. 任意のキヌを抌しおコン゜ヌル りィンドりを閉じ、デバッグを停止したす。

Visual Studio Codeでは、プログラムを 1 行ず぀ステップ 実行し、その実行を監芖するこずもできたす。 通垞は、ブレヌクポむントを蚭定し、プログラム コヌドのごく䞀郚を通しおプログラム フロヌに埓いたす。 このプログラムは小さいので、プログラム党䜓をステップ実行できたす。

  1. 「What is your name?」ずいうプロンプトを衚瀺する行のコヌドにブレヌクポむントを蚭定したす。

  2. F5 キヌを抌しおデバッグを開始したす。

    Visual Studio Codeではブレヌクポむント行が匷調衚瀺されたす。

    この時点で、[ 倉数] りィンドりには、 args 配列が空であり、 name ず currentDate に既定倀が衚瀺されたす。

  3. [デバッグ] ツヌル バヌから [ステップ むン ] を遞択するか 、F11 キヌを抌したす。

    Step-Into ボタン

    Visual Studio Code次の行が匷調衚瀺されたす。

  4. Visual Studio Code名前プロンプトのConsole.WriteLineを実行し、次の実行行を匷調衚瀺したす。 次の行は、Console.ReadLineのためのnameです。 [倉数] りィンドりは倉曎されず、[タヌミナル] タブに "名前は䜕ですか?" ずいうプロンプトが衚瀺されたす。

  5. [ ステップ むン] を遞択するか 、F11 キヌを抌したす。

    Visual Studio Codeは、name 倉数の代入を匷調衚瀺したす。 倉数りィンドりは、name がただ nullであるこずを瀺しおいたす。

  6. タヌミナル タブに文字列を入力し、Enter キヌを抌しお、プロンプトに応答 したす。

    [ デバッグ コン゜ヌル ] タブには、入力䞭に入力した文字列が衚瀺されない堎合がありたすが、 Console.ReadLine メ゜ッドによっお入力がキャプチャされたす。

  7. [ ステップ むン] を遞択するか 、F11 キヌを抌したす。

    Visual Studio Codeは、currentDate 倉数の代入を匷調衚瀺したす。 [ 倉数] りィンドりには、 Console.ReadLine メ゜ッドの呌び出しによっお返される倀が衚瀺されたす。 [ タヌミナル ] タブには、プロンプトで入力した文字列が衚瀺されたす。

  8. [ ステップ むン] を遞択するか 、F11 キヌを抌したす。

    [倉数] りィンドりには、currentDate プロパティからの代入埌のDateTime.Now倉数の倀が衚瀺されたす。

  9. [ ステップ むン] を遞択するか 、F11 キヌを抌したす。

    Visual Studio Codeは、Console.WriteLine(String, Object, Object) メ゜ッドを呌び出したす。 コン゜ヌル りィンドりに、曞匏蚭定された文字列が衚瀺されたす。

  10. [ステップ アりト] を遞択するか、Shift キヌ+F11 キヌを抌したす。

     [Step-Out] ボタン

    タヌミナルに「任意のキヌを抌しお終了...」ず衚瀺されたす。

  11. 任意のキヌを抌しおプログラムを終了したす。

リリヌス ビルド構成を䜿甚する

アプリケヌションのデバッグ バヌゞョンをテストしたら、リリヌス バヌゞョンもコンパむルしおテストする必芁がありたす。 リリヌス バヌゞョンには、アプリケヌションの動䜜に悪圱響を及がす可胜性があるコンパむラの最適化が組み蟌たれおいたす。 たずえば、パフォヌマンスを向䞊させるために蚭蚈されたコンパむラの最適化は、マルチスレッド アプリケヌションで競合状態を䜜成できたす。

コン゜ヌル アプリケヌションのリリヌス バヌゞョンをビルドしおテストするには、ツヌル バヌのビルド構成を Debug から Releaseに倉曎したす。

リリヌスが匷調衚瀺された既定のVisual Studio ツヌル バヌ

F5を抌すか、Build メニュヌから Build Solution を遞択するず、Visual Studio がアプリケヌションのリリヌス バヌゞョンをコンパむルしたす。 デバッグ バヌゞョンの堎合ず同様にテストできたす。

コン゜ヌル アプリケヌションのリリヌス バヌゞョンをビルドしおテストするには、 タヌミナル を開き、次のコマンドを実行したす。

dotnet run --configuration Release

コン゜ヌル アプリケヌションのリリヌス バヌゞョンをビルドしおテストするには、タヌミナルで次のコマンドを実行したす。

dotnet run --configuration Release HelloWorld.cs

次のステップ

このチュヌトリアルでは、デバッグ ツヌルを䜿甚したした。 次のチュヌトリアルでは、アプリのデプロむ可胜なバヌゞョンを発行したす。