2013-01-24 31 views
3
  • 第1步:我建立myProgram.exe并产生myProgram.pdb在它旁边。
  • 第2步:我故意在myProgram.exe中导致崩溃。
  • 步骤3:有人问我,如果我想使用Visual Studio作为调试器,和我做。
  • 步骤4:Visual Studio从myProgram.pdb中加载符号。
  • 第5步:我检查调用堆栈以确定崩溃发生的地点(已知)。
  • 第6步:我不皱眉或看起来很困惑,因为这是应该的。

但是,如果我重命名myProgram.exe和myProgram.pdb到SomethingElse.exe和SomethingElse.pdb并重复这些步骤,结果是从步骤4起混合。据我所知,在我的生成机器上,VS将始终从重命名的PDB文件中成功加载符号。但是,在我的远程目标机上,VS永远不会加载符号 - 它总是告诉我PDB文件与可执行文件不匹配。为什么不?我打破了一个晦涩的规则吗?在任何情况下,我都在运行Visual Studio 2005。是什么导致符号不能从PDB文件加载?

+0

我刚才测试了这另一个“远程”机器上(在我的办公室),其上不会发生这种情况。显然,对于实际的远程机器来说,有一些特定的东西......它没有联网,除了生产时间以外难以访问。所以我想我是在提示可能会导致对这些文件进行简单名称更改以使其PDB无法使用的技巧之后。如果新版本出现问题,工作人员将恢复为已重命名的可执行文件...并且我失去了符号支持,因此很难追踪那里的问题。它只是变得非常恼人的:-( – omatai

+0

这可能是一个愚蠢的问题,但你为什么不更改程序集名称,而不是事后更改文件名吗?无论如何,这是一个奇怪的行为。 –

+0

我重命名文件,当我创建一个新的版本 - 我保存一份副本作为“myProgram [date] .exe”,以防我需要恢复它。但是最近,由于未处理的异常,工作人员已经恢复到这些重命名的文件。这个奇怪的行为 – omatai

回答

2

这里被打破简单的微妙的规则是,PDB文件名称似乎被编码成EXE文件,而不是从EXE文件名的。因此,例如,如果通过在Windows资源管理器中进行简单的复制并粘贴来创建“Copy of myProgram.exe”和“Copy of myProgram.pdb”,则可能会出现尽管名称已更改但正在加载符号的情况。但是,只有原始的“myProgram.pdb”文件也存在时,这只会起作用 - 如果删除“myProgram.pdb”并且只有“Copy of myProgram.pdb”,则这些符号可能是兼容的,但Visual Studio不会甚至尝试加载它们。

在我办公室的远程机器上进行的快速而脏的测试中,所有更改的都是文件名,而不是文件版本,而在实际的远程机器上,名称和文件版本都不同,所以它是不可能的事情似乎工作。

+0

我有一个PDB文件不可用,即使程序集和PDB文件的名称和位置都与build相同的情况,但它们被移动到另一台机器上,但所有文件位置都是与开发机器上的一样,但Visual Studio不考虑PDB文件来匹配程序集。 – cheeesus

相关问题