Local Debugging Guide for Extend Override — C#
注釈:本資料はAI技術を用いて翻訳されています。
このガイドでは、C# で作成された Extend Override アプリのデバッグに固有の内容を説明します。 環境のセットアップ、VS Code のデバッグワークフロー、ログの読み方、一般的な問題など、共通のデバッグの概念については以下を参照してください。
- Extend ローカルデバッグガイド — すべての Extend アプリタイプに共通する概念
- C# 言語セットアップガイド — .NET の前提条件、アタッチモード、jq、および C# 固有のトラブルシューティング
- Extend Override デバッグガイド — すべての言語に共通する Override 固有の概念
このガイドの例では、マッチメイキング のユースケース
(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.proto | Protobuf 定義 — MSBuild の Grpc.Tools がビルド時に C# スタブを自動的に再生成します。 |
appsettings.json | ポートのバインディングとアプリケーション設定。 |
ポート番号(appsettings.json で設定):
| ポート | 用途 |
|---|---|
6565 | gRPC サーバー (HTTP/2) — AGS からの呼び出しを受け付けます |
8080 | HTTP メトリクスエンドポイント (/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.cs — MakeMatches 内の while (await requestStream.MoveNext()) ループ内 |
| ルールの解析 | Services/MatchFunctionService.cs — JsonSerializer.Deserialize<GameRules>(rulesJson) |
| 認証/トークン検証の失敗 | Classes/AuthorizationInterceptor.cs — インターセプターのエントリーポイント |
| サービスがまったく起動しない | Program.cs — ホストビルダーと app.Run() の呼び出し |
条件付きブレークポイントの構文については、 C# 言語ガイドを参照してください。
ログの読み方
このサービスは ASP.NET Core 標準の ILogger を使用します。jq によるログのフィルタリング(JSON 出力が
設定されている場合)については、
C# 言語ガイドを参照してください。
開発モードのログを有効にするには、.env で DOTNET_ENVIRONMENT=Development を設定します。これにより
ASP.NET Core ホストからより詳細な出力が得られます。
オーバーライドを手動でテストする
grpcurl の使用方法とオーバーライドされた AGS 機能のトリガーについては、Override メインガイドの
オーバーライドを手動でテストするを参照してください。
demo/ ディレクトリには、事前に用意されたリクエストを含む Postman コレクション
(*.postman_collection.json) があります。これを Postman にインポートし、ローカル環境用に
baseUrl と token を更新してください。
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.json や appsettings.Development.json から追加の設定を読み込む場合があります。
.env で DOTNET_ENVIRONMENT=Development を設定すると、開発モードの設定とより詳細な
ホストログが有効になります。
ポートの競合を確認する
C# 言語ガイドの ポートの競合を確認する を参照してください。
AI アシスタンス
各 Override ユースケースのアプリテンプレートには、.claude/skills/debugging-guide/SKILL.md に
Claude エージェントスキルが付属しています。AI プロンプトのヒントと MCP サーバーの詳細については、
Override メインガイドのAI アシスタンスによるデバッグを
参照してください。
使用例別のサービスファイル参照
上記のデバッグワークフローは、すべての Override ユースケースに適用されます。ユースケースごとに異なるのは サービスファイルと proto のみです。実装ファイルを見つけるには、以下の表を使用してください。
| ユースケース | C# サービスファイル | Proto ファイル |
|---|---|---|
| Matchmaking | Services/MatchFunctionService.cs | Protos/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 リポジトリを参照してください。