Visual Studio:此文档没有加载任何符号。

52

我遇到了一些调试Visual Studio 2008 C++项目的问题。当我在调试时启动它时,断点被禁用并显示以下信息:

无法命中断点。未为此文档加载符号。

我已尝试进行清理和重新构建,但这并没有什么效果。

我还尝试查看“调试”->“窗口”->“模块”。如果我右键单击要调试的模块并按下“符号加载信息”,它会弹出一个列表,其中包含它尝试从哪些位置加载符号。列表中的第一个是正确的且文件存在,但旁边是以下错误信息:

C:\path\to\my\symbol\Debug\MyProject.pdb: 未知的符号处理程序错误

有人知道是什么原因引起的,或者如何解决吗?


2
你尝试过使用“生成 > 清理解决方案”吗?这将删除可能已损坏的临时文件。 - MSalters
我已经提到了,就在第一个引用下面 ;) - Jim Jeffries
你是在尝试调试正在运行的可执行项目中的代码吗?还是在已链接的静态库中的代码? - bunkerdive
此外,请确保输出(pdb)文件名设置为 $(OutDir)$(TargetName)。您应该能够在项目属性->配置属性->C/C++->输出文件->程序数据库文件名下找到它。 - bunkerdive
1
对于 C++/CLI 项目,您可能需要进入项目属性 -> 调试,并将调试器类型设置为“混合”,在我的 VS 2015 中,默认设置为“自动”,这样不会很好地工作。 - jrh
1
啊啊啊啊啊啊啊啊,浪费了半个小时在所有这些解决方案上,但是没有一个有效的!!!!!!!!!!! - John Glen
22个回答

45

首先,你的某些模块可能不会在模块窗口中显示,因为其中一些可能是动态加载的(只在需要时才加载)。

你可能想要在项目属性下查看链接器 > 调试 > 生成程序数据库文件和生成调试信息。确保这两个选项设置正确。

此外,检查 C/C++ > 常规 > 调试信息格式 是否设置为编辑并继续使用程序数据库(/ZI)或类似内容。

我知道你提到了符号文件已经存在,但检查我刚才提到的内容将确保你拥有正确版本的符号文件并放置在正确位置。

最后,请确保你的解决方案中所有项目和文件都设置为以Debug模式编译,而不是Release或其他模式,因为对于这个项目/文件将不会生成任何符号(因此也不会被加载)。

希望这能有所帮助。


1
谢谢,但这些设置都已正确设置。我还检查了.pdb文件的创建时间,它与我构建的时间相匹配。 - Jim Jeffries
2
当使用默认的Release构建时,仍会生成调试信息。但是,由于优化,调试器的工作效果不太好(例如,许多变量会消失)。 - Bartek Banachewicz
你的解决方案中有多个项目吗? - TurnsCoffeeIntoScripts
不,只是我的解决方案中的一个项目。 - Jim Jeffries
你所有的文件(右键点击文件,进入属性)是否都设置为C/C++头文件(.h)和C/C++编译器(.cpp / .cc / .c)? - TurnsCoffeeIntoScripts
5
我在VS2015中遇到了同样的问题,情况很有趣。我将一个在win32和x64版本都正常工作的VS2013项目升级到了VS2015,但是当我升级到VS2015后,发现在win32版本中断点能够被触发,而在x64版本中无法触发。最终我发现x64版本带有 /Zi(程序数据库),而win32版本则带有 /ZI (用于编辑和继续的程序数据库)。我将x64版本切换为 /ZI,问题得以解决。至于为什么现在不能使用 /Zi 进行调试,我不知道。 - Graham Asher

8
如果有人在使用“附加到进程”时遇到这个问题,那么这个问题的答案对我有帮助:
具体来说,在“附加到”选项中切换到“本机代码”,而不是“自动”。
要了解更多信息,请访问以下链接:Visual Studio is not loading modules when attaching to process。请注意保留HTML标记。

谢谢,我花了一周时间才找到你的文本。 - kien

7
在我的情况下,通过在“工具/选项/调试/常规”中勾选“使用托管兼容模式”解决了问题。

4

前往需要使用该DLL进行调试的网站的“属性”,然后在下面的“调试器”部分中选择“本机代码”:

输入图像描述


4

我已经通过将我的源代码横向复制并检查完全干净的副本来解决了这个问题。我认为这是存储在项目 .suo 文件中的某些设置。


3

可能 mspdbsrv.exe 进程存在问题。尝试关闭它,然后重新启动调试器。


3

删除bin和obj文件夹中的所有文件,然后重新构建解决方案。如果你的问题与我的一样,那么似乎VS正在加载一个旧版本的某个未知文件,而重建解决方案/项目并不会替换它。在尝试此方法之前,请确保备份您的解决方案/项目。祝好运!


帮我解决了。我怀疑手动或通过软件触碰这些文件会将它们标记为用户更改,从而使它们不再被修改。 - undefined

3

对我来说,解决问题的方法是重新启动Visual Studio。就这么简单。别的什么方法都没用——尝试过清理(甚至删除了Debug文件夹中的所有文件),检查设置,甚至杀掉mspdbsrv.exe进程,但只有重启VS才奏效。


2
模块 窗口中,您可以右键单击并将您的 调试 输出文件夹添加到系统查找符号文件的文件夹中。此外,对我有用的是手动删除所有输出文件,Clean 不会每次都这样做,这就是为什么即使生成了 .pdb 文件,它也不对应于您的输出文件,因此无法从中加载符号。

1

在您的项目文件夹中复制“Debug”文件夹,然后删除原始“Debug”文件夹中的所有文件。如果您的Visual Studio已经运行并加载了项目,则在删除Debug的内容后关闭它,然后重新打开它,再重建整个项目,理论上此操作将创建新的符号文件副本和调试代码所需的其他文件。 我发现当我将文件移动到另一台计算机并尝试从那里编译和调试代码时,出现了这个问题,尽管所有文件夹和驱动器名称都相同,但IDE无法使用先前创建的符号文件。 希望这个解决方法对其他人有用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接