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

How do I change the locations of source files in a symbols file (pdb)

提问人:Sir Rippov the Maple 提问时间:8/26/2008 最后编辑:David ArenburgSir Rippov the Maple 更新时间:8/21/2015 访问量:12401

问:

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

调试 符号 PDB 文件

评论


答:

9赞 Matt Dillard 8/26/2008 #1

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

subst N: <MyRealPath>

然后打开相对于 N: 驱动器的项目并重新生成它。您的 PDB 文件将引用 N: 上的源文件。现在,将这组特定的源文件放在何处并不重要,只要您随后像构建根目录时那样调用根目录“N:”即可。

John Robbins 在他的优秀著作《为 Microsoft .NET 和 Microsoft Windows 调试应用程序》中推荐了这种做法。

12赞 On Freund 8/26/2008 #2

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

评论

0赞 Sir Rippov the Maple 2/12/2011
直接从源代码管理中对 PDB 进行索引是 GOLD!我希望所有的开源项目都能开始这样做。
1赞 Pete 5/2/2012
那就是薄荷。我不知道这个功能!这篇文章也很有用:entland.homelinux.com/blog/2006/07/06/...
1赞 NiKiZe 7/29/2020
上面评论中的链接现在已失效@Pete。幸运的是,有 web.archive.org/web/20150328011952/http://entland.homelinux.com/...
1赞 deemok 10/6/2008 #3

这当然是可能的,正如 On Freund 已经指出的那样。 但是,如果只是为了在调试过程中定位和加载源,那么更好的方法是相应地设置源路径。在调试器中设置后,它将预置 PDB 中的所有硬编码路径。

在windbg中(例如):

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

3赞 Dave 2/10/2011 #4

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

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

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