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

Posted

技术标签:

【中文标题】Visual Studio 没有为此文档加载任何符号【英文标题】:Visual Studio No Symbols have been loaded for this document 【发布时间】:2012-01-10 14:50:06 【问题描述】:

我在调试 Visual Studio 2008 C++ 项目时遇到了一些问题。当我开始在调试中运行它时,断点被禁用并显示消息

断点不会被命中。没有为此加载任何符号 文件。

我尝试过清理和重建,但这并没有什么不同。

我还尝试查看 Debug->Windows->Modules。如果我右键单击要调试的模块并按符号加载信息,它会显示一个它试图从中加载符号的位置列表。列表中的第一个是正确的并且文件存在,但是它旁边是这个错误

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

有谁知道这是什么原因造成的或如何解决?

【问题讨论】:

您尝试过构建>清洁解决方案吗?这将删除可能已损坏的临时文件。 我有,正如第一句话下面提到的那样;) 您是否正在尝试调试正在运行的可执行项目中的代码?还是在您链接的静态库中编写代码? 另外,确保输出 (pdb) 文件名设置为 $(OutDir)$(TargetName) 。您应该可以在项目属性 -> 配置属性 -> C/C++ -> 输出文件 -> 程序数据库文件名下找到它。 对于 C++/CLI 项目,您可能需要进入项目的属性 -> 调试,并将调试器类型设置为“混合”,对我来说,在 VS 2015 中它默认为“自动”,这不会工作得很好。 【参考方案1】:

在我的情况下,错误是由于部分代码作为外部库连接的事实。为了使调试过程在进入外部库的代码时也能正常工作,不仅需要添加其头文件,还需要添加实现文件 - 解决方案资源管理器的文件夹 Source Files。

【讨论】:

【参考方案2】:

如果 /GL 选项已启用,请尝试在 C/C++/常规/优化/Whole program optimization 中禁用

最初,我在调试程序时没有任何问题,但在到处调整之后,OP 所说的问题开始出现。

模块及其符号已加载,this guide 中的任何内容似乎都与我的问题不符。将/Zi 转为/Zl 也无济于事。

我不知道为什么,但是,这是一种我以前从未经历过的编译器行为。仅供参考,/GL 选项在 VS2017 的 C++ 项目中不是默认选项。

【讨论】:

【参考方案3】:

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

您可能希望在 Linker > Debugging > Generate Program Database File 和 Generate Debug Info 下检查您的项目属性。确保这两个设置正确。

另外,检查 C/C++ > General > Debug Information Format 是否设置为 Program Database for Edit And Continue (/ZI) 或类似的。

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

最后,检查解决方案中的所有项目和文件是否设置为编译为 Debug 而不是 Release 或其他,因为不会为该项目/文件生成任何符号(因此不会加载)。

希望这会有所帮助。

【讨论】:

谢谢,但这些设置都设置正确。我还检查了 .pdb 文件的创建时间,它与我构建的时间相匹配。 使用默认发布版本时,仍会生成调试信息。然而,由于优化,调试器不能很好地工作(例如,很多变量消失了)。 您的解决方案中有多个项目吗? 不,我的解决方案中只有一个项目 我在 VS2015 中遇到了同样的问题。这很有趣。我已经从 VS2013 项目升级,该项目在 win32 和 x64 版本中都运行良好,但是当我升级到 VS2015 时,我发现在 win32 构建中遇到了断点,但在 x64 构建中没有。我最终发现 x64 版本有 /Zi(程序数据库),而 win32 有 /ZI(用于编辑和继续的程序数据库)。我将 x64 构建更改为 /ZI 并解决了问题。为什么你现在不能用 /Zi 调试,我不知道。【参考方案4】:

这对我有帮助:

    调试 -> 附加到进程

    向下滚动到 w3wp.exe

    勾选“显示所有用户的进程

    刷新后再次滚动到 w3wp.exe

    选择新的 x64 类型的,Managed (Native compilation)

【讨论】:

【参考方案5】:

就我而言,它是调试器类型。

我使用远程 windows 调试器,将其更改为本地解决了一个问题。

调试器选项:

【讨论】:

【参考方案6】:

我正在调试 WIA 驱动程序,遇到了类似的问题。 我注意到了这个日志:

名为 C:\Windows\System32\WIA\wiadriverex.dll 的 DLL 无法加载(LoadLibraryEx 返回 0x0000007E)。确保驱动安装正确

然后我意识到这是由于 DLL 依赖。然后我将所需的 DLL 复制到 System32,问题就消失了。注意,复制到System32,不然我就不行了。

【讨论】:

【参考方案7】:

以上都没有帮到我……

最后我从 Debug\X64 更改为 Debug\win32,这很有帮助,可能是一些配置在两者中都不相同。也许这会有所帮助 某人的解决方法...

希望对任何人都有帮助。

【讨论】:

【参考方案8】:

转到将使用该 dll 进行调试的网站的“属性”,然后在下面的“调试器”部分中选择“本机代码”:

【讨论】:

【参考方案9】:

如果有人在使用“附加到进程”时遇到这个问题,这个问题的答案为我解决了这个问题:

Visual Studio is not loading modules when attaching to process

具体来说,在“附加到”选项中切换到“本机代码”而不是“自动”。

【讨论】:

谢谢,我花了 1 周时间才找到您的文字。【参考方案10】:

VS2015 C++

我在尝试在 VS2015 中调试我的应用程序时取消加载符号后遇到了同样的问题。在此之后,VS2015 拒绝加载我感兴趣的项目的符号(C# 调用 C++ DLL 的解决方案中的多个子项目)。上面的解决方案对我不起作用,但确实如此。

对于 Visual Studio 2015 (C++):

    右键单击断点所在的项目并选择 properties 展开 C/C++ 在 C/C++ 下选择常规 将调试信息格式更改为任何其他选项 点击应用 将调试信息格式改回其默认的“程序 用于编辑并继续的数据库 (/ZI)(或任何您喜欢的) 点击应用 现在重新构建您的项目

希望这会有所帮助。 艾伦·M

【讨论】:

【参考方案11】:

在我的情况下,“linker->general”中的“use library dependency inputs”应该设置为yes,那么问题就解决了。

【讨论】:

【参考方案12】:

在项目文件夹中复制“调试”文件夹,然后删除原始“调试”文件夹中的每个文件。作为附加措施,如果您的 Visual Studio 已经在加载项目的情况下运行,请在删除 Debug 的包含后关闭它并在重新构建整个项目之前重新打开它,理论上此操作将创建符号文件的新副本,其余部分需要调试您的代码。 当我将文件移动到其他计算机并尝试从那里编译和调试我的代码时,我发现这个问题发生了,尽管所有文件夹和驱动器名称都相同,但 IDE 无法使用之前创建的符号文件. 希望这项工作对其他人有用!。

【讨论】:

【参考方案13】:

1) 右键单击​​要调试的项目。

2) 选择[属性]

3) 选择[Build]标签

4) 确保选中[Define DEBUG constant][Define TRACE constant]

5) 点击构建标签页底部的[高级]按钮 确保 [Debug Info:] 设置为 [full]

6) 点击[确定]

7) 重建项目

【讨论】:

我没有看到 C++ 项目的选项。这是针对其他语言的吗? 所有语言项目的选项都相同。我的答案是 C#.net 语言。【参考方案14】:

删除 bin 和 obj 文件夹中的所有文件。然后再次构建解决方案。如果您的问题和我的一样,似乎 VS 正在加载特定未知文件的旧版本,重建解决方案/项目不会替换该文件。确保在尝试之前制作您的解决方案/项目的副本。祝你好运!

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

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

【讨论】:

【参考方案17】:

对我来说,解决方法是重新启动 Visual Studio :) 就这么简单。没有其他帮助 - 尝试清理(甚至删除了 Debug 文件夹中的所有文件),检查设置,甚至杀死了 mspdbsrv.exe 进程,但只有 VS 重新启动才能成功。

【讨论】:

【参考方案18】:

mspdbsrv.exe 进程可能存在问题。尝试杀死它并重新启动调试器。

【讨论】:

【参考方案19】:

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

【讨论】:

以上是关于Visual Studio 没有为此文档加载任何符号的主要内容,如果未能解决你的问题,请参考以下文章

“断点目前不会被击中。没有为此文档加载任何符号。” - .pdb 从错误的地方加载?

如何解决“当前不会命中断点。没有为此文档加载任何符号。”警告?

远程调试 .Net 应用程序“没有为此文档加载任何符号”时出现问题。

断点当前不会被命中。没有为此文档加载任何符号

目前不会命中 VS 2008 断点。没有为此文档加载任何符号

无法调试 - “断点当前不会被命中。没有为此文档加载任何符号”