メインコンテンツまでスキップ

Local Debugging Guide for Extend Override — C#

Last updated on July 14, 2026

注釈:本資料はAI技術を用いて翻訳されています。

このガイドでは、C# で作成された Extend Override アプリのデバッグに固有の内容を説明します。 環境のセットアップ、VS Code のデバッグワークフロー、ログの読み方、一般的な問題など、共通のデバッグの概念については以下を参照してください。

このガイドの例では、マッチメイキング のユースケース (matchmaking-function-grpc-plugin-server-csharp) を使用しています。プロジェクト構造とデバッグ手順は 他のすべての Override ユースケースでも同じで、サービスファイルと proto のみが異なります。このガイドの最後にある サービスファイル参照表を参照してください。


プロジェクト構造

matchmaking-function-grpc-plugin-server-csharp/
├── .env.template # Environment variable template
├── .vscode/
│ ├── launch.json # VS Code debug configuration
│ └── tasks.json # VS Code tasks (Build: App, etc.)
└── src/
├── plugin-arch-grpc-server-csharp.sln # Solution file
└── AccelByte.PluginArch.Demo.Server/
├── AccelByte.PluginArch.Demo.Server.csproj
├── Program.cs # Entry point — Kestrel / ASP.NET Core setup
├── appsettings.json # Server config, port assignments
├── Classes/
│ ├── AuthorizationInterceptor.cs # IAM token validation interceptor
│ ├── AppSettingConfigRepository.cs
│ └── DefaultAccelByteServiceProvider.cs
├── Model/
│ └── RuleObject.cs # GameRules model
├── Protos/
│ └── matchFunction.proto # Protobuf definition (MSBuild regenerates on build)
└── Services/
└── MatchFunctionService.cs # Your override logic
ファイル役割
Program.csエントリーポイント — Kestrel を設定し、gRPC サービスを登録し、認証インターセプターを組み込みます。
Services/MatchFunctionService.csオーバーライドロジック本体MatchFunction.MatchFunctionBase を拡張し、GetStatCodes、ValidateTicket、EnrichTicket、MakeMatches、BackfillMatches を実装します。
Classes/AuthorizationInterceptor.cs受信するすべての gRPC 呼び出しの IAM トークンを検証します。
Protos/matchFunction.protoProtobuf 定義 — MSBuild の Grpc.Tools がビルド時に C# スタブを自動的に再生成します。
appsettings.jsonポートのバインディングとアプリケーション設定。

ポート番号appsettings.json で設定):

ポート用途
6565gRPC サーバー (HTTP/2) — AGS からの呼び出しを受け付けます
8080HTTP メトリクスエンドポイント (/metrics)

サービスをローカルで実行する

ターミナルから

# Export all variables from your .env file
export $(grep -v '^#' .env | xargs)

dotnet run --project src/AccelByte.PluginArch.Demo.Server

VS Code から

このリポジトリには、デバッグ起動とは別の専用の実行タスクは付属していません。上記のターミナルコマンドを使用するか、 (アプリのビルドと起動も行う)「Debug: App」 起動構成を実行してください。

サービスが起動していることを確認する

以下のような ASP.NET Core の起動ログが表示されます。

info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://0.0.0.0:6565
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://0.0.0.0:8080
info: Microsoft.Hosting.Lifetime[0]
Application started.

gRPC サーバーに到達できることを確認します。

grpcurl -plaintext localhost:6565 list

デバッガーのアタッチ

VS Code(推奨)

このリポジトリには、.vscode/launch.json にすぐに使える起動構成が付属しています。

{
"name": "Debug: App",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "Build: App",
"program": "${workspaceFolder}/src/AccelByte.PluginArch.Demo.Server/bin/Debug/net8.0/AccelByte.PluginArch.Demo.Server.dll",
"args": [],
"cwd": "${workspaceFolder}/src/AccelByte.PluginArch.Demo.Server",
"stopAtEntry": false,
"envFile": "${workspaceFolder}/.env",
"console": "integratedTerminal",
"justMyCode": true
}

共通デバッグガイドのデバッガーのアタッチ の手順に従い、ドロップダウンから 「Debug: App」 を選択します。

preLaunchTask: "Build: App" の手順は、デバッガーが起動する前にプロジェクトをコンパイルし、 protobuf スタブを再生成します。

フレームワークコードへのステップイン

"justMyCode": true は .NET ランタイムと gRPC フレームワークのフレームをスキップします。 AuthorizationInterceptor.cs や ASP.NET Core の gRPC ミドルウェアにステップインする必要がある場合は false に設定してください。

他の IDE — 実行中のプロセスにアタッチする

診断を有効にしてアプリを起動します。

export $(grep -v '^#' .env | xargs)
DOTNET_EnableDiagnostics=1 dotnet run --project src/AccelByte.PluginArch.Demo.Server

その後、JetBrains Rider または Visual Studio から Run → Attach to process を使ってアタッチします。


ブレークポイントを設置する場所

調べたい内容ファイルと位置
呼び出されている特定の gRPC メソッドServices/MatchFunctionService.cs — 該当メソッドの先頭
ストリーミングチケット処理Services/MatchFunctionService.csMakeMatches 内の while (await requestStream.MoveNext()) ループ内
ルールの解析Services/MatchFunctionService.csJsonSerializer.Deserialize<GameRules>(rulesJson)
認証/トークン検証の失敗Classes/AuthorizationInterceptor.cs — インターセプターのエントリーポイント
サービスがまったく起動しないProgram.cs — ホストビルダーと app.Run() の呼び出し

条件付きブレークポイントの構文については、 C# 言語ガイドを参照してください。


ログの読み方

このサービスは ASP.NET Core 標準の ILogger を使用します。jq によるログのフィルタリング(JSON 出力が 設定されている場合)については、 C# 言語ガイドを参照してください。

開発モードのログを有効にするには、.envDOTNET_ENVIRONMENT=Development を設定します。これにより ASP.NET Core ホストからより詳細な出力が得られます。


オーバーライドを手動でテストする

grpcurl の使用方法とオーバーライドされた AGS 機能のトリガーについては、Override メインガイドの オーバーライドを手動でテストするを参照してください。

demo/ ディレクトリには、事前に用意されたリクエストを含む Postman コレクション (*.postman_collection.json) があります。これを Postman にインポートし、ローカル環境用に baseUrltoken を更新してください。


C# 固有のトラブルシューティング

Proto の変更が反映されない

症状: Protos/matchFunction.proto を編集したが、生成されたコードスタブが更新されていない。

原因: MSBuild の Grpc.Tools はビルド時に C# スタブを自動的に再生成しますが、部分ビルドや キャッシュされたビルドでは再生成がスキップされる場合があります。

対処法: クリーンビルドを実行します。

dotnet clean src/AccelByte.PluginArch.Demo.Server
dotnet build src/AccelByte.PluginArch.Demo.Server

VS Code の起動構成にある preLaunchTask: "Build: App" は、デバッグセッションごとにこれを自動的に 実行します。


PLUGIN_GRPC_SERVER_AUTH_ENABLED — 認証がすべての呼び出しを拒否する

症状: ローカルでテストすると、すべての gRPC 呼び出しが unauthenticated を返す。

対処法: .env ファイルに PLUGIN_GRPC_SERVER_AUTH_ENABLED=false を追加します。これにより AuthorizationInterceptor が無効になり、有効なトークンなしでテストできます。デプロイ前に 再度有効化することを忘れないでください。


DOTNET_ENVIRONMENT と設定ソース

アプリは appsettings.jsonappsettings.Development.json から追加の設定を読み込む場合があります。 .envDOTNET_ENVIRONMENT=Development を設定すると、開発モードの設定とより詳細な ホストログが有効になります。


ポートの競合を確認する

C# 言語ガイドの ポートの競合を確認する を参照してください。


AI アシスタンス

各 Override ユースケースのアプリテンプレートには、.claude/skills/debugging-guide/SKILL.md に Claude エージェントスキルが付属しています。AI プロンプトのヒントと MCP サーバーの詳細については、 Override メインガイドのAI アシスタンスによるデバッグを 参照してください。


使用例別のサービスファイル参照

上記のデバッグワークフローは、すべての Override ユースケースに適用されます。ユースケースごとに異なるのは サービスファイルと proto のみです。実装ファイルを見つけるには、以下の表を使用してください。

ユースケースC# サービスファイルProto ファイル
MatchmakingServices/MatchFunctionService.csProtos/matchFunction.proto
Cloud Save Validatorリポジトリの README を参照リポジトリの README を参照
Lootbox Rollリポジトリの README を参照リポジトリの README を参照
Profanity Filterリポジトリの README を参照リポジトリの README を参照
Revocationリポジトリの README を参照リポジトリの README を参照
Rotating Shop Itemsリポジトリの README を参照リポジトリの README を参照
Session DSMリポジトリの README を参照リポジトリの README を参照
Session Managerリポジトリの README を参照リポジトリの README を参照
Challenge Assignmentリポジトリの README を参照リポジトリの README を参照

各使用例と言語のリポジトリリンクについては、 Extend Override リポジトリを参照してください。


参考資料