「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Visual Studio]]
-戻る
--[[ビルド]]
--[[Visual Studio]]

* 目次 [#v6f6ca57]
#contents

*概要 [#ze5d1ca2]
-一致が望ましいが、ビルド環境と開発環境のソースファイルパスが一致しているケースは稀。
-ビルド環境と開発環境のソースファイルパスを一致させる方法について調査した。

-結論としては、[デバッグ ソース ファイル]に指定したフォルダ以下に~
ビルド環境と構成を一致させたソースファイルが存在すれば問題ない。

*PDBとデバッガ [#ee51547d]
**概要 [#f26b1e0b]
-シンボル ファイルとも呼ばれるプログラム データベース (.pdb) ファイル
--ソース ファイルの識別子を、実行可能ファイルで使用される識別子に対応付ける。
--ソース コード内のステートメントを実行可能ファイル内の実行命令に対応付ける。

-デバッガはこの情報を使用して以下の 2 つを決定する。
--Visual Studio IDE に表示されるソース ファイルと行番号。
--設定されたブレークポイントによって実行可能ファイル内で停止する位置。

-また、シンボル ファイルには以下が格納されている。
--ソース ファイルの元の場所、
--および必要に応じてソース ファイルを取得できる[[ソース サーバ>#oa07a535]]の場所
--および必要に応じてソース ファイルを取得できる「[[ソース サーバ>#oa07a535]]」の場所

**シンボル ファイルの検索 [#v5777f5f]
[ツール]、[オプション]、[デバッグ]、[シンボル] で、検索パスと[[シンボル サーバ>#uf34ac5a]]を指定できる。
**シンボル ファイルの検索パス [#v5777f5f]
[ツール] ---> [オプション] ---> [デバッグ] ---> [シンボル] で、~
シンボル ファイルの検索パスと「[[シンボル サーバ>#uf34ac5a]]」を指定できる。

-[シンボル ファイル (.pdb) の場所]にURL またはディレクトリ パスを入力
-[このディレクトリにシンボルをキャッシュ]にディレクトリ パスを入力

-次のシンボルを自動的に読み込む
--[除外されていないすべてのモジュール]オプション - [除外されるモジュールの指定]リンク
--[指定したモジュールのみ]オプション - [モジュールの指定]リンク

-[起動時にシンボルが見つからないとき警告 (ネイティブのみ)]
-[DLL エクスポートを読み込む]

**ソース ファイルの検索順 [#a182ac9f]
Visual Studioが以下の順序で、ソース ファイルを検索して解決するもよう。

-Visual Studioが以下の順序で、ソース ファイルを検索して解決するもよう。
>
+デバッガーを実行している Visual Studio インスタンスの IDE (devenv.exe) が開いているファイル
+Visual Studio インスタンスで開いているソリューション内のファイル
+Visual Studio ソリューションの [共通プロパティ] - [デバッグ ソース ファイル] ページで指定したディレクトリ。
+モジュールの *.pdbファイル に含まれるソース情報。~
場合によって、
--[[ソース サーバ>#oa07a535]]へのコマンド
+モジュールの *.pdbファイル に含まれるソース情報。

-場合によって、
--「[[ソース サーバ>#oa07a535]]」へのコマンド
--モジュールがビルドされたソース ファイルの場所
なお、ここでファイルが見つからなかった場合、

>を検索する。

--なお、ここでファイルが見つからなかった場合、
---..\に遡りながらファイルを探し、
---見つからなかった場合、ファイルが見つからない旨のページを表示し、手動での指定が求められる。~
ファイルが指定された場合は、指定したフォルダのパスが自動的に [デバッグ ソース ファイル] へ追加される。

以降、[デバッグ ソース ファイル]で指定したフォルダから正しく構成されていれば問題なく参照可能になる。
--ファイルが検索された場合は、そのフォルダのパスが自動的に [デバッグ ソース ファイル] へ追加される。

-[デバッグ ソース ファイル]で指定したフォルダ以下に、~
ビルド サーバと同じフォルダ構成でソース ファイルが配置されていれば、~
以降、デバッグ時に、問題なくソース ファイルの参照が可能になる。

*サーバとデバッガ [#ge5e7ea9]

**ソース サーバ [#oa07a535]

***概要 [#xbd8ee56]
symsrv プロトコルを実装する「ソース サーバ」からソース ファイルをダウンロードできる。

***有効化 [#bff94dc7]
「ソース サーバ」の使用を有効にするには、

-[ツール] ---> [オプション] ---> [デバッグ] ---> [全般]
--[マイ コードのみを有効にする]のチェックを外す。
--[.NET Framework ソースのステッピングを有効にする]のチェックを外す。
--[ソース サーバー サポートを有効にする]のチェックを入れ、~
以下の子オプションを選択する(省略可能)。
---[ソース サーバー診断メッセージを出力ウィンドウに表示する]
---[部分信頼アセンブリのソース サーバーを許可する (マネージのみ)]
---[信頼されていないソース サーバー コマンドを常に確認なしで実行する]

**シンボル サーバ [#uf34ac5a]
-symsrv プロトコルを実装するシンボル サーバからシンボル ファイル(PDB)をダウンロードできる。
-ダンプやライブデバッグでシンボルを使用する場合は、シンボル サーバを使用すればよいが、~
F5実行のデバッグでシンボルを使用する場合は、下記の[[ソース サーバ>#oa07a535]]を使用する。

*ソース サーバ [#oa07a535]
**概要 [#xbd8ee56]
-ソース サーバは、ファイルの要求を受け取り、実際のファイルを返す。
-ソース サーバは、srcsrv.dll という名前の DLL ファイルを使用して実行される。
-ソース サーバでは、ソースファイル以外に、以下も読み取る。 
--ソース コードのレポジトリへのポインタを含むアプリケーションの .pdb ファイル
--ポジトリからソース コードを取得するときに使用するコマンド
***概要 [#t6cbc349]
-symsrv プロトコルを実装する「シンボル サーバ」からシンボル ファイル(PDB)をダウンロードできる。

-.pdb ファイルには任意のコマンドを埋め込むことができる。
-このシンボル ファイル(PDB)には任意のコマンドを埋め込むことができる。
--このコマンドは、セキュリティ リスク的な観点から、制限できる。
---srcsrv.ini というファイルに許可する(≒実行する)コマンドを列挙し、~
srcsrv.dll および devenv.exe と同じディレクトリに配置する。
---srcsvr.ini ファイルにないコマンドを実行しようとすると、~
確認のダイアログ ボックスが表示される。

**有効化 [#bff94dc7]
ソース サーバの使用を有効にするには
***有効化 [#abd00abb]
「シンボル サーバ」の使用を有効にするには、

-前のセクションで説明したセキュリティ手法で、コンパイルを完了します。
-[ツール] メニューの [オプション] をクリック。
-[オプション] ダイアログ ボックスが表示。
-[デバッグ] ノードで、[全般] を選択。
-[ソース サーバー サポートを有効にする] チェック ボックスをオン
-[ソース サーバー サポートを有効にする] オプションを選択
-(省略可能) 必要な子オプションを選択
--[ソース サーバー診断メッセージを出力ウィンドウに表示する]
--[部分信頼アセンブリのソース サーバーを許可する (マネージのみ)]
--[信頼されていないソース サーバー コマンドを常に確認なしで実行する]
-[ツール] ---> [オプション] ---> [デバッグ] ---> [シンボル]~
'---> [シンボル ファイル (.pdb) の場所]で「シンボルサーバ」のURLを指定する。

*デバッグできない場合 [#p0f20511]
-なお、「[[ソース サーバ>#oa07a535]]」の場所は、「シンボル ファイル (.pdb)」に含まれている。

*トラブルシュート [#n8f8cdf0]
**デバッグできない場合 [#p0f20511]
***現象 [#ve50f680]
以下のように、

-ステップ・インする際に、
>「ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?」

-ブレーク・ポイントを設定した際に、
>「ブレークポイントは、現在の設定ではヒットしません。ソースコードが元のバージョンと異なります。」

というメッセージが表示されデバッグできない場合がある。

この場合は、
***対策 [#r95954e6]
-この現象は、
--Visual Studio Debugger はソースファイルのハッシュを PDB のものと比較しており、
--ソースファイルの内容が異なってることを検出することができるため、発生する。

-ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?~
-この場合、~
--ソースファイルがモジュールがビルドされたときのものと異なります。デバッガでこのファイルを使用しますか?~
https://visual-studio-professional.com/source-file-module-build
>[ツール] ---> [オプション] ---> [デバッグ] ---> [全般] の順にクリックし、~
[元のバージョンと完全に一致するソース ファイルを必要とする] チェック ボックスをオフにする。

の手順に従って、
--の手順に従って、ハッシュ値の一致を無視したデバッグ実行が可能な設定に変更することができる。

デバッグ実行が可能な設定に変更することができる。
**[デバッグ ソース ファイル]の保存場所 [#j75721c5]
***設定のクリア [#h596499b]
[[下記>#i7eb9260]]を削除するか、保存場所のソース ファイル自体を削除する。

***保存場所 [#i7eb9260]
-ソリューションの [共通プロパティ] - [デバッグ ソース ファイル] は、~
ソリューションのプロパティに追加され .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 で同一のソース ファイルが開かれている場合、そのファイルが利用される。

*参考 [#t0a40798]
-シンボル (.pdb) ファイル、ソース ファイル、およびバイナリ ファイルの検索~
https://msdn.microsoft.com/ja-jp/library/ms241613.aspx#Anchor_1

-Specify symbol (.pdb) and source files in the debugger~
https://docs.microsoft.com/en-us/visualstudio/debugger/specify-symbol-dot-pdb-and-source-files-in-the-visual-studio-debugger

----
Tags: [[:.NET開発]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS