4

実際にそのライブラリを使用するソリューションとは別に構築されたスタティック ライブラリ プロジェクトで、Debugging Tools for Windows のソース サーバー ツールを使用する方法が見つかりません。ライブラリ用に生成された PDB ファイルのファイルが見つかりました (コンパイラ オプション /ZI および /Fd を使用)。

この PDB で "srctool.exe -r" を実行しても何も表示されません。これはおそらく、PDB ファイルにソース ファイル情報が含まれていないことを意味します。同じソリューションの一部としてビルドされているテスト アプリケーションの PDB ファイルに対して同じコマンドを実行すると、予想されるすべてのソース ファイルのリストが生成されます。

静的ライブラリ プロジェクトを使用するソリューションとは別にビルドする必要がある場合、静的ライブラリ プロジェクトにソース インデックスを使用する方法はありますか?

ご提案ありがとうございます。

4

3 に答える 3

4

"/Save" および "/Load" オプションを使用して、スタティック ライブラリのソース情報をそれぞれ格納およびロードできます。これらのオプションを使用すると、ライブラリの情報を保存し、後でライブラリにリンクするプロジェクトのインデックスを作成するときにインポートできます。

ライブラリ ソリューションのインデックスを作成するときは、ライブラリのソース ファイルに関するインデックス情報を格納するディレクトリに "/Save" フラグを指定します。たとえば (ソース管理に Subversion を使用していると仮定します)、

ssindex.cmd /System=SVN /Save=c:\source\libproj\srcinfo /Source=c:\source\libproj /Symbols=c:\source\libproj\Release\*.pdb 

後でライブラリを含むプロジェクトのインデックスを作成するときは、ライブラリのソース ファイル情報を含むディレクトリで "/Load" フラグを指定します。例えば、

ssindex.cmd /System=SVN /Load=c:\source\libproj\srcinfo /Source=c:\source\binproj /Symbols=c:\source\binproj\Release\*.pdb 

この手法の使用に影響を与える可能性のある問題が 2 つあります。まず、一部のソース管理プロバイダーは、ソース管理情報の保存と読み込みをサポートしていないようです。Subversion プロバイダーがそうしていることは知っていますし、SourceSafe プロバイダーもそうしているように見えますが、他はチェックしていません。

第 2 に、この手法は、すぐに使用できる 1 つの外部静的ライブラリに対してのみ機能するようです。複数のディレクトリから情報をロードする方法はないようで、スクリプトは現在、「/Save」オプションを使用するたびにディレクトリの内容を上書きします。ソース管理プロバイダー モジュールを編集して、保存ディレクトリ内のファイルを上書きするのではなく追加することもできますが、私は試していません。

また、上記のように、ライブラリが別のソリューションの一部として構築されている場合にのみこれを行う必要があることに注意してください。スタティック ライブラリがインデックスを作成するソリューションの一部である場合、そのソース ファイルは、"/Source" オプションで指定されたパスにある場合に含まれます。

于 2010-12-28T18:09:19.677 に答える
0

おそらく、「ssindex」を実行するときに正しいディレクトリを入力していないことを意味するため、ssindex には次のものが必要です: /source=C:/SourceCode/ /symbols=C:/SourceCode/bin/Debug 「source」には大文字の S があってもなくても、それでいいのです!

于 2009-10-09T08:29:09.487 に答える
0

svnindex.cmd を実行すると、常に「ソース ファイルが見つかりません」と表示される

svn.pm (svn を処理するための perl モジュール) を掘り下げた後、次のことがわかりました。

  1. 最初に、svn.pm は "svn info -R $SourceRoot" を呼び出して、$SourceRoot 内のファイルのすべてのバージョン情報を取得します (/source オプションで渡されます)。

  2. 次に、svn.pm はローカル ファイル パスをキーとして使用するディクショナリにすべてのファイルを保存します。

  3. svnindex.cmd srctool -r を呼び出して *.pdb 内のすべてのソース ファイル情報を取得し、ソース ファイル名をキーとして使用してステップ 2 で保存した情報を照会します。

問題は:

svn.pm は相対パスを使用しますが、*.pdb は絶対パスを使用するため、どのファイルの svn ログ情報も見つからず、「ソース ファイルが見つかりません」と表示されます。

修理する:

svn.pm の 162 行目を変更します。

$LocalFile = lc $1;

に   

$LocalFile = $SourceRoot . "\" . lc $1; #絶対パスにする

于 2013-06-08T13:46:17.103 に答える