Visual Studio による Service Fabric アプリケーションのデバッグ
ローカルの Service Fabric アプリケーションをデバッグする
重要
リモート デバッグは、VS 2022 ではサポートされていません
ローカル コンピューターの開発クラスターで Azure Service Fabric アプリケーションをデプロイしデバッグすることにより、時間と費用を節約できます。 Visual Studio 2019 または 2015 は、アプリケーションをローカル クラスターにデプロイし、デバッガーをアプリケーションのすべてのインスタンスに自動的に接続できます。 デバッガーを接続するには、Visual Studio が管理者として実行されている必要があります。
「 Service Fabric 開発環境の設定」にある手順に従って、ローカル開発クラスターを開始してください。
F5 キーを押すか、 [デバッグ]>[デバッグの開始] の順にクリックします
コードにブレークポイントを設定し、 [デバッグ] メニューのコマンドをクリックしてアプリケーションをステップ実行します。
Note
Visual Studio は、アプリケーションのすべてのインスタンスにアタッチします。 コードのステップ実行中に、ブレークポイントに複数のプロセスがヒットして、同時セッションになる場合があります。 ヒットしたブレークポイントを無効にし、ブレークポイントをスレッド ID の条件付きにするか、診断イベントを使用します。
[診断イベント] ウィンドウが自動的に開き、診断イベントをリアルタイムで表示します。
[診断イベント] ウィンドウは、Cloud Explorer で開くこともできます。 [Service Fabric] の下で任意のノードを右クリックし、 [ストリーミング トレースを表示する] を選択します。
トレースを特定のサービスまたはアプリケーションにフィルター処理する場合は、その特定のサービスまたはアプリケーションでストリーミング トレースを有効にします。
診断イベントは自動的に生成される ServiceEventSource.cs でも確認でき、アプリケーション コードから呼び出されます。
ServiceEventSource.Current.ServiceMessage(this, "My ServiceMessage with a parameter {0}", result.Value.ToString());
[診断イベント] ウィンドウは、フィルター処理、一時停止、およびリアルタイムのイベント検査をサポートしています。 このフィルターは、イベント メッセージとその内容の単純な文字列検索です。
サービスのデバッグは、その他のアプリケーションのデバッグと似ています。 通常は、デバッグを容易にするために Visual Studio を使用してブレークポイントを設定します。 Reliable Collections は複数のノード間で複製されますが、IEnumerable は実装されます。 この実装は、デバッグ中に Visual Studio の結果ビューを使用して、内部で何を格納したかを確認できることを示します。 それを行うには、コード内の任意の場所にブレークポイントを設定します。
デバッグの一部としてのスクリプトの実行
特定のシナリオでは、デバッグ セッションの開始の一部としてスクリプトを実行する必要があります (既定のサービスを使用していない場合など)。
Visual Studio では、Service Fabric Application プロジェクト (.sfproj) の Scripts フォルダーに Start-Service.ps1 というファイルを追加できます。 このスクリプトは、ローカル クラスターでアプリケーションが作成された後に呼び出されます。
リモートの Service Fabric アプリケーションをデバッグする
Service Fabric アプリケーションが Azure 内の Service Fabric クラスター上で実行されている場合は、Visual Studio から直接、これらのアプリケーションをリモートでデバッグできます。
Note
この機能には Service Fabric SDK 2.0 と Azure SDK for .NET 2.9 が必要です。
警告
リモート デバッグは開発/テスト シナリオ向けであり、運用環境向けではありません。これは、実行中のアプリケーションに影響が生じるためです。
Cloud Explorer でクラスターに移動します。 右クリックし、 [デバッグを有効にする] を選択します。
このアクションにより、クラスター ノード上のリモート デバッグ拡張機能や、必要なネットワーク構成を有効にするプロセスが開始されます。
Cloud Explorer でクラスター ノードを右クリックし、 [デバッガーのアタッチ] を選択します。
[プロセスにアタッチ] ダイアログ ボックスで、デバッグするプロセスを選択し、 [アタッチ] をクリックします。
アタッチするプロセスの名前は、サービス プロジェクト アセンブリ名と同じ名前です。
デバッガーはプロセスを実行するすべてのノードにアタッチされます。
ステートレス サービスをデバッグしている場合は、すべてのノード上のサービスのすべてのインスタンスがデバッグ セッションの一部になります。
ステートフル サービスをデバッグしている場合は、いずれかのパーティションのプライマリ レプリカのみがアクティブになり、そのためデバッガーによってキャッチされます。 デバッグ セッション中にプライマリ レプリカが移動した場合でも、そのレプリカの処理は引き続きデバッグ セッションに含まれます。
特定のサービスの関連するパーティションまたはインスタンスのみをキャッチするには、条件付きブレークポイントを使用して、特定のパーティションまたはインスタンスのみを中断できます。
Note
現在、サービスの実行可能ファイル名が同名の複数のインスタンスを持つ Service Fabric クラスターのデバッグはサポートされていません。
アプリケーションのデバッグが完了したら、Cloud Explorer でクラスターを右クリックし、 [デバッグの無効化] を選択して、リモート デバッグ拡張機能を無効にできます。
リモート クラスター ノードからのストリーミング トレース
トレースをリモート クラスター ノードから直接 Visual Studio にストリーミングすることもできます。 この機能を使用すると、Service Fabric クラスター ノードで生成された ETW トレース イベントをストリーミングできます。
Note
この機能には Service Fabric SDK 2.0 と Azure SDK for .NET 2.9 が必要です。 この機能は、Azure で実行するクラスターのみをサポートします。
警告
ストリーミング トレースは開発/テスト シナリオ向けであり、運用環境向けではありません。これは、実行中のアプリケーションに影響が生じるためです。 運用環境のシナリオでは、Azure Diagnostics を使用したイベント転送に頼る必要があります。
Cloud Explorer でクラスターに移動します。 右クリックし、 [ストリーミング トレースを有効にする] を選択します。
このアクションにより、クラスター ノード上のストリーミング トレース拡張機能や、必要なネットワーク構成を有効にするプロセスが開始されます。
Cloud Explorer で [ノード] を展開し、ストリーミング トレースを実行するノードを右クリックし、 [ストリーミング トレースを表示する] を選択します。
トレースを表示するノードの数だけ手順 2. を繰り返します。 各ノード ストリームは専用のウィンドウに表示されます。
これで、サービスと Service Fabric によって出力されるトレースを表示できるようになりました。 特定のアプリケーションのみを表示するようにイベントをフィルター処理する場合は、フィルターにアプリケーション名を入力します。
クラスターからのストリーミング トレースが完了したら、リモートのストリーミング トレースを無効化できます。このためには、Cloud Explorer でクラスターを右クリックし、 [ストリーミング トレースを無効にする] を選択します。