シンボル ファイル (pdb) 内のソース ファイルの場所を変更するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/27952

  •  09-06-2019
  •  | 
  •  

質問

基本的に私がやりたいことはこれです:pdb ファイルにはソース ファイルの場所が含まれています (例: C:\dev\proj1\helloworld.cs)。別の場所を含むようにその pdb ファイルを変更することは可能ですか (例: \more\differenter\location\proj1\helloworld.cs)?

役に立ちましたか?

解決

Windows 用デバッグ ツールのソース インデックス作成機能を使用すると、ソース リポジトリ内のファイルの適切なリビジョンへの参照が、PDB ファイル内の代替ストリームとして保存されます。

他のヒント

pdb ファイルに埋め込まれたパスをより一般的に知りたい場合は、まず MS-DOS を使用してください。 subst 特定のフォルダーをドライブ文字にマップするコマンド。

subst N: <MyRealPath>

次に、N: を基準にしてプロジェクトを開きます。運転して再構築します。PDB ファイルは、N: 上のソース ファイルを参照します。ビルドしたときと同じように、後でルート ディレクトリを「N:」と呼ぶ限り、ソース ファイルの特定のセットをどこに配置しても問題はありません。

この実践は、ジョン・ロビンズ氏の優れた著書の中で推奨されています。 Microsoft .NETおよびMicrosoft Windows用のアプリケーションのデバッグ.

自分のマシンでビルドしていない実行可能ファイルで発生したクラッシュ ダンプをデバッグするために、これに対する答えを見つけたいと思っていました。そのため、PDB で参照されているソース コードへのパスが無効であり、PDB へのパスも無効でした。実行可能ファイル内で参照されます。

いろいろ探してもうまくいくものが見つからなかった後、実行可能ファイルと PDB をクラッシュ ダンプ ファイルと並べて置くとよいことがわかりました。同じディレクトリ内にある) VS でクラッシュ ダンプを開いて実行すると、VS はローカルで PDB/EXE を見つけて使用します。さらに、コールスタック内のエントリをクリックすると、ソースコードの場所の入力を求めるプロンプトも表示されます。関連するソース コードを指定すると、すべて正常に動作します。これは素晴らしいことです。

とにかく、これが他の人に役立つことを願っています...:)

オン・フロイントがすでに指摘しているように、それは確かに可能です。ただし、デバッグ中にソースを見つけてロードできるようにするためだけの場合は、それに応じてソース パスを設定する方が良いでしょう。デバッガーで設定すると、PDB 内のすべてのハードコードされたパスがプリエントされます。

Windbg では (たとえば):

.srcpath+ ソースルートへのパス
またはこれ (リモートでデバッグしている場合):
.lsrcpath+ ソースルートへのパス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top