62

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

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

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

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

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

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

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

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

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

4

19 回答 19

44

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

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

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

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

于 2013-08-08T12:42:42.710 回答
35

我只是从启动项目文件夹中删除了 bin 和 obj 文件夹并重建了解决方案。

于 2014-12-12T13:31:58.503 回答
11

对我来说,我刚刚从 IIS 中删除了项目并再次创建它,它工作正常

于 2015-01-17T06:47:47.540 回答
9

对我来说,它有助于使用 chkmatch 工具,然后关闭并打开 Visual Studio,进行清理和重建。现在我的 pdb 也被加载了。正如 Nanhydron 指出的那样,您可以从 Debug -> Windows -> Modules 确保它确实如此——这个视图只能在调试期间访问。

于 2014-04-10T08:56:20.150 回答
9

我发现我收到消息的项目在构建时正在优化。

我进入项目属性,编译选项卡,高级编译选项...并取消选中该Enable Optimizations复选框

取消选择启用优化

于 2016-07-14T14:55:57.150 回答
7

在我的情况下,旧版本的引用 dll 在我的 GAC 中。清除它,它工作。

于 2015-04-29T18:52:05.750 回答
5

Enable Just My Code就我而言, in上有一个复选标记Tools>>Options>>Debugging>>General

我取消选中它并且它有效。

示例图像

于 2018-08-11T13:57:31.217 回答
4

提醒:将项目放入“调试”配置中……对于像我这样忘记并感到愚蠢的人。

于 2016-05-03T14:38:22.857 回答
3

我刚遇到这个问题,并想我会把我的修复放在这里,因为它可以帮助其他人(甚至是我自己?!)在未来......

确保当您附加到远程服务器上的进程时,“附加到”设置为

自动确定要调试的代码类型

为此,当提供了服务器限定符并且进程列表可见时,单击“附加到”输入旁边的“选择”按钮。

图 1 然后,在屏幕上选择“自动确定要调试的代码类型”并确定,然后附加。

图 2
这至少为我解决了这个问题。

于 2016-09-09T13:07:30.050 回答
2

从解决方案中删除了项目并将其再次添加到为我工作的解决方案中。:)

于 2015-08-06T08:12:10.723 回答
2

在这里聚会有点晚了——以防万一这有帮助。

我们有几个单独的网站(在 Visual Studio 中的不同解决方案中)。在其中一个站点的初始加载时,我们正在调用另一个站点,该站点将返回图像。

这两个站点都引用了一个通用 DLL,但在一个站点上工作时,并没有意识到另一个站点已被留在“发布”版本中 - 在站点加载后,有问题的 DLL 被重建,但没有符号。

感谢 Nanhydron 提到了模块调试窗口(非常有帮助),并让我在构建后事件中走上了正确的轨道。

于 2015-09-24T14:35:21.283 回答
2

另一个对我有用的线程的回答:https
://stackoverflow.com/a/28476665/5969306 - 在 Visual Studio 中:项目属性 -> 构建 -> 高级按钮 -> 调试信息下拉菜单并确保该值不是“没有任何”。

于 2016-02-23T15:27:22.150 回答
0

我的调试窗口中有这样一行:

未加载模块“MyModule.dll”的符号。

我删除了项目属性 -> 构建中的“优化代码”选项。错误消失了。

于 2017-01-17T07:51:51.910 回答
0

此问题可能是由于项目中使用的 dll 引用错误

删除当前项目中的objbin文件夹,重新构建项目。

于 2017-02-03T13:23:15.980 回答
0

检查 ASP.NET 临时文件夹的权限:

"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files"

应用程序池的用户必须有权访问包含 ASP.NET 文件的子文件夹,例如:

root\60039743\c28e12ee
于 2018-04-19T13:09:55.303 回答
0
  1. 检查此答案的选项:https ://stackoverflow.com/a/38377530/6911991
  2. 单击高级并检查调试信息是否设置为完整
    高级选项卡屏幕截图
  3. 检查解决方案中所有项目中的运行配置
于 2018-11-01T17:26:48.443 回答
0

我遇到了这个问题,尝试了所有其他解决方案(花了 2 天!!我哭了......!两天!)但最后我意识到我的文件已在 GAC 中注册,我将其删除并解决了问题。

在命令提示符处,键入以下命令:

gacutil –u <assembly name>

如何:从全局程序集缓存中删除程序集

于 2019-06-15T09:30:41.640 回答
0

请检查您的dll的依赖关系,如果您添加到解决方案中,这可能会导致加载符号失败。

于 2020-05-06T15:43:53.807 回答
0

我通过在“调试” ->“选项”菜单中禁用“使用托管兼容模式”解决了这个问题:

在此处输入图像描述

于 2021-10-20T21:01:47.613 回答