はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#, Rider】SourceGeneratorに対してブレークポイントを用いてデバッグするにはlaunchSettings.jsonが大切

はじめに

今回はSourceGeneratorでブレークポイントを用いたデバッグをRiderでする方法を紹介したいと思います。

Rider公式で紹介されていて、今まで頑張ってテストコード書いてデバッグしてましたがもっと手軽にできることを知って衝撃を受けました。もっと早く知りたかった...。
blog.jetbrains.com

テストコードは生成されたコードに対して行うくらいが楽ですし、十分なのではと個人的に思います。(依存先のアセンブリを拾ってくるのがめっちゃ面倒…)

やり方

launchSettings.jsonの配置

launchSettings.jsonが必要です。通常Propertiesフォルダ以下に配置してあげます。

# 自分がよくやるファイル構成 (SourceGeneratorsは好きなプロジェクト名で)
.
├── SourceGenerators.Unity
│   ├── Assets
│   ...
├── SourceGenerators.Core
│   ├── Properties
│   │   └── launchSettings.json
│   ├── SampleGenerator.cs
│   └── SourceGenerators.Core.csproj
├── SourceGenerators.Sample
│   ├── Sample.cs
│   └── SourceGenerators.Sample.csproj
├── SourceGenerators.Tests
│   ├── SampleGeneratorTest.cs
│   └── SourceGenerators.Tests.csproj
└── SourceGenerators.sln

jsonの書き方は以下のように書きます。

{
  "$schema": "https://json.schemastore.org/launchsettings.json",
  "profiles": {
    "DebugRoslynSourceGenerator": {
      "commandName": "DebugRoslynComponent",
      "targetProject": "../SourceGenerators.Sample/SourceGenerators.Sample.csproj"
    }
  }
}

targetProjectが肝で、解析対象となる.csprojを指定します。例えばHogeAttributeを解析するSourceGeneratorなら、[Hoge]をつけたものをtargetProjectで指定したプロジェクトに入れておきます。

また"commandName": "DebugRoslynComponent"が設定されていれば、profiles直下の名前は何でもOKです。$schemacommandNameは固定で、targetProjectを設定してあげるイメージです。

ブレークポイントの設定と実行

あとはSourceGenerator本体に対して、ブレークポイントを設定します。

ブレークポイントの設定


最後にlaunchSettings.jsonを開き、DebugRoslynSourceGeneratorの左側にある再生ボタンから、デバッグを実行すればOKです。

DebugRoslynSourceGenerator