但是,如果我将myProgram.exe和myProgram.pdb重命名为SomethingElse.exe和SomethingElse.pdb并重复这些步骤,则结果将从步骤4开始混合。据我所知,在我的构建机器上,VS将始终从重命名的PDB文件中成功加载符号。但是,在我的远程目标机器上,VS永远不会加载符号 - 它总是告诉我PDB文件与可执行文件不匹配。为什么不?我打破了一条晦涩难懂的规则吗?我在任何地方都运行Visual Studio 2005,以防万一。
答案 0 :(得分:2)
这里简单的细微规则是PDB文件名似乎被编码到EXE文件中,而不是从EXE文件名派生。因此,例如,如果您在Windows资源管理器中通过简单的复制和粘贴创建“myProgram.exe的副本”和“myProgram.pdb的副本”,则可能会显示尽管名称发生更改,仍会加载符号。但只有原来的“myProgram.pdb”文件也存在才会起作用 - 如果删除“myProgram.pdb”并且只有“myProgram.pdb的副本”,则符号可能兼容,但Visual Studio不会甚至尝试加载它们。
在我办公室的远程计算机上进行快速和肮脏的测试时,所有更改的都是文件名,而不是文件版本,而在实际的远程计算机上,名称和文件版本都不同,所以它是永远不可能让事情看起来有效。
答案 1 :(得分:0)
如果我的中间目录是输出目录的子目录,Visual Studio 2013 Update 5会为我创建损坏的[1] PDB。我要解决此问题的差异
- <IntDir>$(OutDir)/$(TargetName)/</IntDir>
+ <IntDir>$(OutDir)</IntDir>
[1]已验证与windbg的!itoldyouso