チュートリアル: Visual Studio for Mac を使用して .NET コンソール アプリケーションをデバッグする
重要
Microsoft は、Visual Studio for Mac の提供終了を発表しました。 Visual Studio for Mac は、2024 年 8 月 31 日でサポートが終了します。 代替手段は次のとおりです。
- C# 開発キット および関連する拡張機能 (.NET MAUI、Unity など) を含む Visual Studio Code。
- Mac 上の VM の Windows 上で実行されている Visual Studio。
- クラウド内の VM の Windows 上で実行されている Visual Studio。
詳細については、「Visual Studio for Mac 提供終了のお知らせ」を参照してください。
このチュートリアルでは、Visual Studio for Mac で使用できるデバッグ ツールについて説明します。
前提条件
- このチュートリアルでは、「Visual Studio for Mac を使用して .NET コンソール アプリケーションを作成する」で作成したコンソール アプリを使用します。
デバッグ ビルド構成の使用
"デバッグ" と "リリース" は、Visual Studio の組み込みビルド構成です。 デバッグ用のデバッグ ビルド構成と、最終リリース配布用のリリース構成を使用します。
デバッグ構成では、プログラムのコンパイルにシンボリック デバッグ情報が完全に含まれ、最適化は行われません。 ソース コードと生成された命令の関係は非常に複雑であり、最適化を行うとデバッグが困難になるためです。 プログラムのリリース構成は、シンボリック デバッグ情報を含まず、完全に最適化されます。
既定では、Visual Studio for Mac ではデバッグ ビルド構成が使用されるため、デバッグの前に変更を加える必要はありません。
Visual Studio for Mac を起動します。
「Visual Studio for Mac を使用して .NET コンソール アプリケーションを作成する」で作成したプロジェクトを開きます。
現時点のビルド構成はツールバーに表示されています。 次のツール バーの画像では、アプリのデバッグ バージョンをコンパイルするように Visual Studio が構成されています。
ブレークポイントの設定
"ブレークポイント" によって、ブレークポイントを含む行が実行される前に、アプリケーションの実行が一時的に中断されます。
名前、日付、および時刻を表示する行にブレークポイントを設定します。 これを行うには、コード行にカーソルを置き、⌘\ (command+\) キーを押します。 ブレークポイントを設定するもう 1 つの方法は、メニューから [デバッグ]>[ブレークポイントの設定/解除] を選択することです。
Visual Studio では、ブレークポイントが設定された行を強調表示し、左余白に赤い点を表示することで、その行が示されます。
⌘↵ (command + enter) キーを押して、デバッグ モードでプログラムを起動します。 デバッグを開始するもう 1 つの方法は、メニューから [デバッグ]>[デバッグの開始] を選択することです。
プログラムから名前の入力を求められたら、ターミナル ウィンドウに文字列を入力して、enter キーを押します。
プログラムの実行は、ブレークポイントに到達するときに、
Console.WriteLine
メソッドが実行される前に停止します。
[イミディエイト] ウィンドウを使用する
[イミディエイト] ウィンドウでは、デバッグ中のアプリケーションと対話できます。 変数の値を対話的に変更して、プログラムにどのような影響があるかを確認できます。
[イミディエイト] ウィンドウが表示されない場合は、[表示]>[Windows のデバッグ]>[イミディエイト] の順に選択して表示します。
[イミディエイト] ウィンドウに「
name = "Gracie"
」と入力し、enter キーを押します。[イミディエイト] ウィンドウに「
currentDate = currentDate.AddDays(1)
」と入力し、enter キーを押します。[イミディエイト] ウィンドウに、文字列変数の新しい値と、DateTime 値のプロパティが表示されます。
[ローカル] ウィンドウには、現在実行しているメソッドで定義されている変数の値が表示されます。 変更したばかりの変数の値は [ローカル] ウィンドウで更新されます。
⌘↵ (command+enter) キーを押してデバッグを続行します。
ターミナルに表示される値は、[イミディエイト] ウィンドウで行った変更に対応しています。
ターミナルが表示されない場合は、下部のナビゲーション バーで [Terminal - HelloWorld]\(ターミナル - HelloWorld\) を選択します。
任意のキーを押してプログラムを終了します。
ターミナル ウィンドウを閉じます。
条件付きブレークポイントの設定
プログラムによって、ユーザーが入力する文字列が表示されます。 ユーザーが何も入力しないとどうなるでしょうか。 これは、"条件付きブレークポイント" と呼ばれる便利なデバッグ機能を使用してテストできます。
ctrl キーを押しながら、ブレークポイントを表す赤い点をクリックします。 コンテキスト メニューで [ブレークポイントの編集] を選択します。
[ブレークポイントの編集] ダイアログで、[さらに次の条件が真の場合] の後に続くフィールドに次のコードを入力して、[適用] を選択します。
String.IsNullOrEmpty(name)
ブレークポイントにヒットするたびに、デバッガーは
String.IsNullOrEmpty(name)
メソッドを呼び出し、メソッド呼び出しがtrue
を返す場合にのみ、この行で中断します。条件式の代わりに、"ヒット カウント" を指定できます。この場合、ステートメントが指定された回数実行される前にプログラムの実行が中断されます。
⌘↵ (command+enter) キーを押してデバッグを開始します。
ターミナル ウィンドウで、名前の入力を求められたら、enter キーを押します。
指定した条件 (
name
がnull
または String.Empty) が満たされたため、ブレークポイントに到達すると、プログラムの実行が停止します。[ローカル] ウィンドウを選ぶと、現在実行しているメソッドに対してローカルな変数の値が表示されます。 この場合、
Main
は現在実行中のメソッドです。name
変数の値が""
(つまり、String.Empty) であることを確認します。値が空の文字列であることは、[イミディエイト] ウィンドウに
name
という変数名を入力して enter キーを押すことでも確認できます。⌘↵ (command+enter) キーを押してデバッグを続行します。
ターミナル ウィンドウで、任意のキーを押してプログラムを終了します。
ターミナル ウィンドウを閉じます。
コード ウィンドウの左余白の赤い点をクリックして、ブレークポイントをクリアします。 ブレークポイントをクリアするもう 1 つの方法は、コード行が選択されている間に [デバッグ] > [ブレークポイントの設定/解除] を選択することです。
プログラムのステップ実行
Visual Studio では、1 行ずつプログラムをステップ実行して、実行を監視することもできます。 通常は、ブレークポイントを設定して、プログラム コードのごく一部を通じてプログラム フローに従います。 このプログラムは小さいため、次の手順に従ってプログラム全体をステップ実行できます。
Main
メソッドの開始を示す中かっこにブレークポイントを設定します (command + \ キーを押す)。⌘↵ (command+enter) キーを押してデバッグを開始します。
ブレークポイントがある行で Visual Studio が停止します。
⇧⌘I (shift+command+I) キーを押すか、[デバッグ]>[ステップ イン] を選択して、1 行進めます。
次に実行される行が強調表示されて、横に矢印が表示されます。
この時点で、[ローカル] ウィンドウに
args
配列が空であることが示され、name
とcurrentDate
には既定値が設定されています。 さらに、Visual Studio によって空のターミナルが開かれています。⇧⌘I (shift + command + I) キーを押します。
name
の変数代入を含むステートメントが強調表示されます。 [ローカル] ウィンドウにname
がnull
であると表示され、ターミナルに "What is your name?" という文字列が表示されます。コンソール ウィンドウに文字列を入力して enter キーを押すことで、このプロンプトに応答します。
⇧⌘I (shift + command + I) キーを押します。
currentDate
の変数代入を含むステートメントが強調表示されます。 [ローカル] ウィンドウには、Console.ReadLine メソッドの呼び出しによって返された値が表示されます。 ターミナルには、プロンプトで入力した文字列が表示されます。⇧⌘I (shift + command + I) キーを押します。
[ローカル] ウィンドウには、DateTime.Now プロパティから代入された後の
currentDate
変数の値が表示されます。 ターミナルは変更されません。⇧⌘I (shift + command + I) キーを押します。
Visual Studio は、Console.WriteLine(String, Object, Object) メソッドを呼び出します。 ターミナルには、書式設定された文字列が表示されます。
⇧⌘U (shift + command + U) キーを押すか、[実行]>[ステップ アウト] を選択します。
ターミナルにメッセージが表示され、任意のキーを押すよう求められます。
任意のキーを押してプログラムを終了します。
リリース ビルド構成を使用する
アプリケーションのデバッグ バージョンのテストが終了したら、リリース バージョンもコンパイルしてテストする必要があります。 リリース バージョンには、アプリケーションの動作に悪影響を与える可能性があるコンパイラの最適化が組み込まれています。 たとえば、パフォーマンスを向上させるように設計されたコンパイラの最適化では、マルチスレッド アプリケーションで競合状態が生じる場合があります。
コンソール アプリケーションのリリース バージョンをビルドしてテストするには、次の手順を実行します。
ツール バーのビルド構成を [デバッグ] から [リリース] に変更します。
⌥⌘↵ (option + command + enter) キーを押して、デバッグなしで実行します。
次のステップ
このチュートリアルでは、Visual Studio のデバッグ ツールを使用しました。 次のチュートリアルでは、アプリの展開可能なバージョンを発行します。
.NET