基本上我想这样做: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