現在のプロジェクトの 1 つにシンボル サーバーをセットアップしました。毎晩のビルド中に私は:
- ソースをビルドする
- ビルドで使用されたソースファイルにラベルを適用する
- 必要な情報で pdb ファイルにインデックスを付ける
- MSシンボルサーバーにpdbファイルを保存しました
(実際、私はこの記事に従っています:ソース サーバーはバグを殺すのに役立ちます。
ここで、別のプロジェクトで公開されているシンボルを持つ DLL を参照しました。そのプロジェクトをデバッグし、デバッグ シンボルを発行したプロジェクトのコードにステップ インしたいと考えています。
ソース サーバーのサポートが有効になるように VS.NET をセットアップしました。プロジェクトをデバッグすると、([モジュール] ウィンドウで) 参照されているプロジェクトのシンボルが実際に読み込まれていることがわかります。参照された DLL から派生したメソッドにステップインしようとすると、VS.NET が警告を表示し、VS.NET が実際にコマンドを実行してソース サーバーからソース コードを取得する可能性があることを確認する必要があります。
コマンドは次のようになります。
ss.exe get -GL"c:\Users\... -GF -I-Y -W "$/MyProject/Source/..." -VL"specificversion"
(簡潔にするために完全なパスは省略しました)。
コマンドを実行すると、「利用可能なソース コードがありません」というエラーが表示されます。
コマンドラインでそのコマンドを実行すると、次のエラーが表示されます。
無効な DOS パス
ターゲットパスが存在しない場合、VSS はこのエラーを返すようです。実際、取得したソース ファイルを配置するローカル パスがディスク上に存在しません。VSS はそれを作成する必要があります。
ソース サーバーからソース コードを取得するときにターゲット パスが作成されるように、VS.NET がコマンドを発行することを確認するにはどうすればよいですか?
編集:
私は自分の探求をもう少し進めることができました。ソース サーバー マシンでファイルを編集し、PDB ファイルに記述されている「ストリーム」内に存在する変数にvss.pm
記述されているコマンドを変更しました。VSS_EXTRACT_CMD
(Perl?) コードを次のように変更しました。
push(@stream, "VSS_EXTRACT_CMD=if not exist %vsstrgdir% mkdir %vsstrgdir% | ss.exe get ".
"-GL\"%vsstrgdir%\" -GF- -I-Y ".
"-W \"\$/%var3%\" -VL\"%var4%\"");
そこで、実際には「存在しない場合... mkdir ...」の部分を追加し、2 つのコマンドをパイプ (|) で区切りました。
VS.NET では、VS.NET によって発行される SourceServer コマンドも出力ウィンドウに書き込むように指定しました。したがって、出力ウィンドウにあるコマンドをコピーして、コマンド プロンプトでそのコマンドを実行すると、ディレクトリが作成され、ファイルが取得されます。\o/
残念ながら、VS.NET がこれを行うと、ファイルは取得されず、ディレクトリも作成されません...何が問題なのかについてのアイデアはありますか?
編集: Windows XP マシンでこれをテストしましたが、動作します。オフィスで Windows Vista を使用していますが、Vista では動作しません。VS.NET がターゲット ディレクトリの作成を許可されていないようです。