如何更改符号文件(pdb)中源文件的位置

时间:2008-08-26 12:58:31

标签: debugging symbols pdb-files

基本上我想要这样做:pdb文件包含源文件的位置(例如C:\dev\proj1\helloworld.cs)。是否可以修改该pdb文件,使其包含不同的位置(例如\more\differenter\location\proj1\helloworld.cs)?

4 个答案:

答案 0 :(得分:11)

您可以使用Windows调试工具的源索引功能,该功能将保存对源存储库中文件的相应修订的引用,作为PDB文件中的备用流。

答案 1 :(得分:7)

如果您希望对pdb文件中嵌入的路径更加通用,可以先使用MS-DOS subst命令将特定文件夹映射到驱动器号。

subst N: <MyRealPath>

然后打开相对于N:驱动器的项目并重建它。您的PDB文件将引用N:上的源文件。现在放置那个特定的源文件集并不重要,只要你随后调用根目录“N:”就像你在构建它时那样。

John Robbins在他出色的着作Debugging Applications for Microsoft .NET and Microsoft Windows中推荐了这种做法。

答案 2 :(得分:3)

我想找到答案,以便调试在我的机器上没有构建的可执行文件中发生的故障转储,因此PDB中引用的源代码的路径无效,路径也是如此到可执行文件中引用的PDB。

在搜索并找不到有效的东西之后,我发现如果将可执行文件和PDB放在崩溃转储文件旁边(即在同一目录中),然后在VS中打开并运行崩溃转储,VS将找到并且在本地使用PDB / EXE。此外,它还会在单击调用堆栈中的条目时提示源代码的位置:将其指向相关的任何源代码,一切正常,这很棒!

无论如何,希望这有助于其他人...... :)

答案 3 :(得分:1)

正如On Freund已经指出的那样,这当然是可能的。 但是,如果仅在调试期间可以定位和加载源,那么更好的方法是相应地设置源路径。一旦在调试器中设置,它将预先在PDB内部的所有硬编码路径。

在windbg中(例如):

.srcpath + path_to_source_root
或者这个(如果您正在远程调试):
.lsrcpath + path_to_source_root