我在 Visual Studio 2012 中有一个大型解决方案,其中包含可执行文件和类库项目。调试应用程序时,不会命中某个特定类库项目中的断点。
我查看了Debug> Windows> Modules窗口来检查该项目的符号状态,它显示“无法找到或打开 PDB 文件”。
它还在“用户代码”列下显示“否” 。
我注意到解决方案中的其他一些自定义项目在该列中显示“否”,并且它们的符号也无法加载。“用户代码”下带有“是”的任何内容似乎都已加载它的 pdb 没有问题。但我不确定这是否相关。
我在 dll 上使用了dumpbin /headers并且 pdb 文件的路径存在且正确。
该模块绝对不在符号加载的排除列表中。
我还尝试右键单击模块窗口中的条目,选择“加载符号”并导航到 dll 标头中给出的路径。当我选择 pdb 时,它显示“在此文件夹中找不到匹配的符号文件”。
在我删除这些文件夹和文件、清理解决方案、关闭它并重建整个东西后,我得到了这个。pdb 肯定是与所讨论的 dll 同时构建的。
很明显,问题出在错误消息的“无法打开 pdb”部分。
我已经在 2 台计算机上尝试过,并且两者都表现出相同的行为。
任何人都可以就从这里去哪里提供任何建议,也许为什么地球上对应于 dll 的内置 pdb 不会加载它?
我尝试了一些工具来检查 pdb 和 dll 是否实际匹配,并且使用chkmatch我可以看到正在运行的 dll 中的 GUID 和 obj 文件夹中的 pdb 不匹配。
所以事实证明,虽然项目的 obj 文件夹中的 dll 和 pdb 是匹配的,但实际上被构建后事件复制到应用程序目标文件夹的 dll 是先前构建中的旧 dll。
构建后事件在该特定项目构建之前或至少完成构建之前运行,并且正在从 bin 中复制现有 dll,该 dll 随后被继续构建覆盖。
我通过编辑解决方案的项目依赖项并确保具有构建后事件的项目依赖于未加载的项目,现在 pdb 在调试期间加载,解决了该问题。
我有同样的问题,通过阅读你的解决方案,我仍然不明白你做了什么来解决它。你能解释得更详细一点吗?
基本上我的项目是以错误的顺序构建的。当您在 Visual Studio 2012 中右键单击您的解决方案时,会有一个项目依赖项选项,在打开的窗口中有一个构建顺序选项卡,您可以在其中设置项目的构建顺序。
我尝试从另一个文件夹添加一个 pdb 文件,下载符号(它开始下载 MS 符号,所以停止了它),指定要加载的模块 - 没有工作。我的问题是我从 Nuget 获取 dll,从我拥有的源获取 pdb。我从我拥有的源中复制了 dll 并且它有效!