Visual Studioで外部ソースを含めたデバッグを実行する

Debugging External Sources with Visual Studio - Visual Studio Blog

ほぼ上の記事の紹介になるんですが(というかそのままか)、便利だったのでメモ代わりにブログに残しておきます。

外部ライブラリを使っていると、ブレークポイントによるデバッグで、ライブラリ側のソースコードもステップインしたいことってありませんか?

Visual Studio 2022 Preview 3から、下図に示すようにソリューションエクスプローラーに外部ソースノードが追加されました。これはデバッグ中に表示されて、ソースサーバーの情報を含む、ロードされたシンボル情報(.pdb)が表示されるようになりました。

ソリューションエクスプローラーの外部ソースノードの様子

ソリューションエクスプローラーの外部ソースノードの様子

設定すると(これは後述します)、デバッグ中に外部ソースにステップインしようとすると、ソースサーバーから該当ソースを取得して、実際にステップ実行できます。もちろん実際のコードをソリューションエクスプローラーからも参照できます。

これにより外部ソースを含めたデバッグが格段にしやすくなります。

設定

まず、メニューの「ツール > オプション」を開いて、「デバッグ」項目の「マイコードのみを有効にする」のチェックを外します。

オプション > デバッグ項目

オプション > デバッグ項目

次に、「デバッグ」の左トグルをクリックして出てくる「シンボル」をクリック、「シンボルファイル(.pdb)の場所」でデバッグに追加したいシンボルサーバーにチェックを入れます。「Microsoftシンボルサーバー」を追加すると標準ライブラリなどが、「NuGet.orgシンボルサーバー」を追加すると、nugetで追加したライブラリを外部ソースとして追加できます。

また、「シンボルの自動読み込みの設定」で、読み込まれるモジュールを細かく制御できます。依存するモジュールが増えた場合、サーバーからの取得に時間がかかるため、気になる場合はこれを設定すると良いでしょう。とりあえず全部ってときは「除外されていないすべてのモジュールを読み込む」をチェックすればよいと思います。

オプション > デバッグ > シンボル項目

オプション > デバッグ > シンボル項目

動作確認

あとは、普通にデバッグで外部ソースにステップインすると、適宜シンボルサーバーからソースを取得します。下図のようにブレークポイントを貼って、外部ライブラリのメソッドにステップインします。

デバッグ実行

デバッグ実行

初回の場合はもしかしたら下図のようなウインドウが表示されます。適宜これをOKします。

外部ソースダウンロードの警告ウインドウ

外部ソースダウンロードの警告ウインドウ

すると下図のように、必要に応じてシンボルサーバーにシンボルの読み込みが走ります。

シンボルの読み込み

シンボルの読み込み

読み込みが終わると下図のように、外部ソースでデバッグ実行ができます。

外部ソースのステップ実行

外部ソースのステップ実行

ちなみに外部ソースの取得は、依存が多いと結構時間がかかります。

まとめ

Visual Studio 2022 Preview 3で追加された外部ソースを含めたデバッグ実行を紹介しました。

ライブラリの挙動について、ソースコードレベルで理解したいときの選択肢の1つとして知っておくと便利な気がします。