代码之家  ›  专栏  ›  技术社区  ›  Sir Rippov the Maple

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

  •  20
  • Sir Rippov the Maple  · 技术社区  · 18 年前

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

    4 回复  |  直到 11 年前
        1
  •  11
  •   On Freund    18 年前

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

        2
  •  7
  •   Matt Dillard    18 年前

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

    subst N: <MyRealPath>
    

    然后打开与n:相关的项目,并重新构建它。您的PDB文件将引用n:上的源文件。现在,把这个特定的源文件放在哪里并不重要,只要您随后像构建根目录时那样调用根目录“n:”。

    约翰·罗宾斯在他的优秀著作中推荐了这种做法, Debugging Applications for Microsoft .NET and Microsoft Windows .

        3
  •  3
  •   Dave    15 年前

    我想找到此问题的答案,以便调试发生在未在计算机上生成的可执行文件中的崩溃转储,因此PDB中引用的源代码路径无效,可执行文件中引用的PDB路径也无效。

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

    无论如何,希望这能帮助其他人…:)

        4
  •  1
  •   deemok    17 年前

    这当然是可能的,正如弗伦德已经指出的那样。 但是,如果只是为了在调试期间定位和加载源,那么更好的方法是相应地设置源路径。一旦在调试器中设置好,它将抢占pdb中的所有硬编码路径。

    在windbg中(例如):

    .srcpath+path_to_source_根目录
    或者这样(在远程调试的情况下):
    .lsrcpath+到源根目录的路径