背景
visual Studio上で、「The breakpoint will not currently be hit. No symbols have been loaded for this document.」というメッセージが出てブレークポイントで止まらなくなった。
以下のサイトの回答をもとにデバッグ設定を行ったところ解決できたのだが、実際にどういう設定をしたのか理解するために調べてみた。
実施したデバッグ設定
- プロジェクトの Properties > Build から、「Define DEBUG constant」と「Define TRACE constant」にチェックが入れる
- 「Optimize Code」のチェックをはずす
- 「Advanced」をクリックし、「Debug Info」を「full」にする
Define DEBUG constant と Define TRACE constant
「Define DEBUG constant」 をチェックすると、コード上に記載された Debugクラスのメソッドやプロパティが実行がされる。逆に、チェックを外すとDebugクラスの処理は無視される。「Define TRACE constant」も同様である。
参考サイト:
- C#、VB で推奨されるデバッガー プロパティ設定 - Visual Studio (Windows) | Microsoft Learn
- MCP 70-483 Programming in C# のお勉強 「3-4 アプリケーションをデバッグする」 #C# - Qiita
Optimize Code
C#、VB で推奨されるデバッガー プロパティ設定 - Visual Studio (Windows) | Microsoft Learn によると
最適化されたコードは、生成された命令がソース コードと直接対応していないため、デバッグが困難です。
とのこと。そのためチェックを外す必要があるらしい。
Debug Info
「Debug Info」では、デバッグ情報の出力形式を指定するっぽい。
C# コンパイラ オプション - コード生成オプション - C# | Microsoft Learn によると、それぞれ以下の通りらしい。
- full
- 現在のプラットフォームの既定の形式を使用して、 .pdb ファイルにデバッグ情報を出力する
- pdb-only
- full と同じ(C# 6.0 以降)
- portable
- クロスプラットフォームの移植可能な PDB形式を使用して、デバッグ情報を .pdb ファイルに出力する
- embedded
- 移植可能な PDB形式を使用して、 .dll/.exe 自体 にデバッグ情報を出力する( .pdb ファイルは生成されない )
まとめ
振り返ってみると、3つのデバッグ設定の内、「Optimize Code」の設定だけが効果があったと思う。
元々、DebugクラスやTraceクラスは使ってなかったし、「Debug Info」のもともとの設定はpdb-onlyだったし...