「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- 一致が望ましいが、ビルド環境と開発環境のソースファイルパスが一致しているケースは稀。
- ビルド環境と開発環境のソースファイルパスを一致させる方法について調査した。
- 結論としては、[デバッグ ソース ファイル]に指定したフォルダ以下に
ビルド環境と構成を一致させたソースファイルが存在すれば問題ない。
PDBとデバッガ †
概要 †
- シンボル ファイルとも呼ばれるプログラム データベース (.pdb) ファイル
- ソース ファイルの識別子を、実行可能ファイルで使用される識別子に対応付ける。
- ソース コード内のステートメントを実行可能ファイル内の実行命令に対応付ける。
- デバッガはこの情報を使用して以下の 2 つを決定する。
- Visual Studio IDE に表示されるソース ファイルと行番号。
- 設定されたブレークポイントによって実行可能ファイル内で停止する位置。
- また、シンボル ファイルには以下が格納されている。
- ソース ファイルの元の場所、
- および必要に応じてソース ファイルを取得できる「ソース サーバ」の場所
シンボル ファイルの検索パス †
[ツール] ---> [オプション] ---> [デバッグ] ---> [シンボル] で、
シンボル ファイルの検索パスと「シンボル サーバ」を指定できる。
- [シンボル ファイル (.pdb) の場所]にURL またはディレクトリ パスを入力
- [このディレクトリにシンボルをキャッシュ]にディレクトリ パスを入力
- 次のシンボルを自動的に読み込む
- [除外されていないすべてのモジュール]オプション - [除外されるモジュールの指定]リンク
- [指定したモジュールのみ]オプション - [モジュールの指定]リンク
- [起動時にシンボルが見つからないとき警告 (ネイティブのみ)]
- [DLL エクスポートを読み込む]
ソース ファイルの検索順 †
- Visual Studioが以下の順序で、ソース ファイルを検索して解決するもよう。
- デバッガーを実行している Visual Studio インスタンスの IDE (devenv.exe) が開いているファイル
- Visual Studio インスタンスで開いているソリューション内のファイル
- Visual Studio ソリューションの [共通プロパティ] - [デバッグ ソース ファイル] ページで指定したディレクトリ。
- モジュールの *.pdbファイル に含まれるソース情報。
- 場合によって、
- 「ソース サーバ」へのコマンド
- モジュールがビルドされたソース ファイルの場所
を検索する。
- なお、ここでファイルが見つからなかった場合、
- ..\に遡りながらファイルを探し、
- 見つからなかった場合、ファイルが見つからない旨のページを表示し、手動での指定が求められる。
- ファイルが検索された場合は、そのフォルダのパスが自動的に [デバッグ ソース ファイル] へ追加される。
- [デバッグ ソース ファイル]で指定したフォルダ以下に、
ビルド サーバと同じフォルダ構成でソース ファイルが配置されていれば、
以降、デバッグ時に、問題なくソース ファイルの参照が可能になる。
サーバとデバッガ †
ソース サーバ †
概要 †
symsrv プロトコルを実装する「ソース サーバ」からソース ファイルをダウンロードできる。
有効化 †
「ソース サーバ」の使用を有効にするには、
- [ツール] ---> [オプション] ---> [デバッグ] ---> [全般]
- [マイ コードのみを有効にする]のチェックを外す。
- [.NET Framework ソースのステッピングを有効にする]のチェックを外す。
- [ソース サーバー サポートを有効にする]のチェックを入れ、
以下の子オプションを選択する(省略可能)。
- [ソース サーバー診断メッセージを出力ウィンドウに表示する]
- [部分信頼アセンブリのソース サーバーを許可する (マネージのみ)]
- [信頼されていないソース サーバー コマンドを常に確認なしで実行する]
シンボル サーバ †
概要 †
- symsrv プロトコルを実装する「シンボル サーバ」からシンボル ファイル(PDB)をダウンロードできる。
- このシンボル ファイル(PDB)には任意のコマンドを埋め込むことができる。
- このコマンドは、セキュリティ リスク的な観点から、制限できる。
- srcsrv.ini というファイルに許可する(≒実行する)コマンドを列挙し、
srcsrv.dll および devenv.exe と同じディレクトリに配置する。
- srcsvr.ini ファイルにないコマンドを実行しようとすると、
確認のダイアログ ボックスが表示される。
有効化 †
「シンボル サーバ」の使用を有効にするには、
- [ツール] ---> [オプション] ---> [デバッグ] ---> [シンボル]
'---> [シンボル ファイル (.pdb) の場所]で「シンボルサーバ」のURLを指定する。
- なお、「ソース サーバ」の場所は、「シンボル ファイル (.pdb)」に含まれている。
トラブルシュート †
デバッグできない場合 †
現象 †
以下のように、
- ステップ・インする際に、
「ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?」
- ブレーク・ポイントを設定した際に、
「ブレークポイントは、現在の設定ではヒットしません。ソースコードが元のバージョンと異なります。」
というメッセージが表示されデバッグできない場合がある。
対策 †
- この現象は、
- Visual Studio Debugger はソースファイルのハッシュを PDB のものと比較しており、
- ソースファイルの内容が異なってることを検出することができるため、発生する。
- の手順に従って、ハッシュ値の一致を無視したデバッグ実行が可能な設定に変更することができる。
[デバッグ ソース ファイル]の保存場所 †
設定のクリア †
下記を削除するか、保存場所のソース ファイル自体を削除する。
保存場所 †
- ソリューションの [共通プロパティ] - [デバッグ ソース ファイル] は、
ソリューションのプロパティに追加され .suo ファイル に記録される。
- ソースを選択するダイアログ(コモン コントロール)で最後に選択されたフォルダーが以下のレジストリに記憶される。
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion?\Explorer\ComDlg32\LastVisitedPidlMRULegacy
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion?\Explorer\ComDlg32\OpenSavePidlMRU
※ Visual Studio はコモン コントロールをフックするので、
.suoファイルを消しても、[デバッグ ソース ファイル]の設定が復活することがある。
- IDE で同一のソース ファイルが開かれている場合、そのファイルが利用される。
参考 †
Tags: :.NET開発