Warm tip: This article is reproduced from serverfault.com, please click

c#-未加载符号文件以在 Visual Studio 2012 中调试自定义项目

(c# - Symbol file not loading for debugging custom project in Visual Studio 2012)

发布于 2013-08-07 17:11:19

我在 Visual Studio 2012 中有一个大型解决方案,其中包含可执行文件和类库项目。调试应用程序时,不会命中某个特定类库项目中的断点。

我查看了Debug> Windows> Modules窗口来检查该项目的符号状态,它显示“无法找到或打开 PDB 文件”
它还在“用户代码”下显示“否” 。 我注意到解决方案中的其他一些自定义项目在该列中显示“否”,并且它们的符号也无法加载。“用户代码”下带有“是”的任何内容似乎都已加载它的 pdb 没有问题。但我不确定这是否相关。

我在 dll 上使用了dumpbin /headers并且 pdb 文件的路径存在且正确。

该模块绝对不在符号加载的排除列表中。

我还尝试右键单击模块窗口中的条目,选择“加载符号”并导航到 dll 标头中给出的路径。当我选择 pdb 时,它显示“在此文件夹中找不到匹配的符号文件”

在我删除这些文件夹和文件、清理解决方案、关闭它并重建整个东西后,我得到了这个。pdb 肯定是与所讨论的 dll 同时构建的。

很明显,问题出在错误消息的“无法打开 pdb”部分。

我已经在 2 台计算机上尝试过,并且两者都表现出相同的行为。

任何人都可以就从这里去哪里提供任何建议,也许为什么地球上对应于 dll 的内置 pdb 不会加载它?

Questioner
Nanhydrin
Viewed
0
Nanhydrin 2013-08-08 20:42:42

我尝试了一些工具来检查 pdb 和 dll 是否实际匹配,并且使用chkmatch我可以看到正在运行的 dll 中的 GUID 和 obj 文件夹中的 pdb 不匹配。

所以事实证明,虽然项目的 obj 文件夹中的 dll 和 pdb 是匹配的,但实际上被构建后事件复制到应用程序目标文件夹的 dll 是先前构建中的旧 dll。

构建后事件在该特定项目构建之前或至少完成构建之前运行,并且正在从 bin 中复制现有 dll,该 dll 随后被继续构建覆盖。

我通过编辑解决方案的项目依赖项并确保具有构建后事件的项目依赖于未加载的项目,现在 pdb 在调试期间加载,解决了该问题。