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

Posted

技术标签:

【中文标题】无法调试 - “断点当前不会被命中。没有为此文档加载任何符号”【英文标题】:Can't debug - "The breakpoint will not currently be hit. No symbols have been loaded for this document" 【发布时间】:2010-09-28 04:56:27 【问题描述】:

我在主题行中收到错误消息。我在服务器 2k3sp2 上运行 vs2k8。我尝试删除 pdbs、缓存目录,验证是否在特定页面上设置了调试。有趣的是其他页面调试得很好。就在我翻到这一页的时候。一定是配置问题,但页面指令如下所示:

print("");

我还注意到,在调试时,如果我打开模块窗口,几乎所有符号都显示“符号未加载”状态。但是,在对下面的 msdn 文章进行更多研究后,MSFT 的一篇帖子说,如果它是核心 .net dll,它不会加载符号,所以我并不担心。一些 microsoft 模块(如 System.Enterpricesservices.wrapper.dll)显示一个感叹号,并显示消息“模块未在默认加载地址加载”。不知道为什么那个 dll 在那里,因为我不知道对它的任何调用。

这是我尝试过的东西:

Breakpoint not hooked up when debugging in VS.Net 2005

http://social.msdn.microsoft.com/Forums/en-US/vbide/thread/557fdedb-268e-48a8-9944-29b2b4e0dec2/#page:3

比尔

【问题讨论】:

【参考方案1】:

当我使用两个单独的网站时,我通常会看到这个错误弹出。我有一个 Web 前端和一个 Web 服务后端。如果开发服务器没有为代码文件所在的“站点”运行,那么您将收到该错误消息。

这可能不是您的问题,但是当我看到该错误消息时通常是这种情况。您可以做的另一件事是调试 -> 如果调试器未附加到正确的进程,则附加到进程。

【讨论】:

关于附加到进程,当我尝试附加到进程时,w3wp.exe是灰色的。剩下的只有那些看起来不相关的(ccapp、ctfmon、smax4pnp 和 smcgui)。那么,这是否确认调试器已附加到正确的进程? 通常当它变灰时,它已经附加了一个调试器。由于我仍在使用 VS 2005 和 .NET 2.0...,因此我无能为力【参考方案2】:

这通常发生在 VS 用于调试的 .pdb 文件与代码实际执行的文件不同时。也就是说,如果您对程序集进行了更改。 此外,请确保您在 web.config 中有 <compilation debug="true">。我不知道它是否与 page 指令有任何关系,但这通常对我有用:)

【讨论】:

网络配置有一个 属性集。 VS 用什么来调试?我已经从 vs temp 缓存文件夹中删除了文件,并删除了 pdb 文件。请注意,当我重新编译时,不会在 bin 文件夹中重新创建 pdb 文件。不应该重生吗? 通常网站很好,当您调试引用的程序集时,我会看到此问题。只要 debug 设置为 true,它就应该生成它需要的所有调试符号,但我认为它们不会进入 bin,我认为它们会进入临时文件 感谢指出这是我的问题【参考方案3】:

我同意,当我有多个不同步的程序集和/或一个或多个 pdb 与源不匹配时,我已经看到了这一点。就我而言,这是因为我的版本控制软件 (ClearCase) 有点奇怪,而且我实际上并没有按照我的想法进行编译。

【讨论】:

【参考方案4】:

放置一个内联 break statement 以确保您确实在运行代码。如果您不停止,则很可能您尝试调试的代码没有运行,或者您没有使用托管调试器对其进行调试。

如果您确实停止但找不到源代码,那么您可能没有该模块的 pdb。检查调用堆栈窗口的顶部以查看哪个程序集包含您停止的方法。那是您需要 pdb 的程序集。模块窗口将显示该组件在磁盘上的位置。命令行工具“dumpbin -headers assembly.dll”将转储 PE 标头。检查调试目录以查看构建程序集时 pdb 的放置位置。如果调试目录不存在,则程序集是在没有调试信息的情况下构建的。如果是这种情况,那么您的问题是确定为什么在没有调试信息的情况下构建了该特定程序集。如果它确实有调试信息并且存在 pdb,但没有被加载,那么这意味着调试器没有找到 pdb,您应该查看 tools\options\debug\symbol 设置。或者 pdb 和程序集不匹配。如果时间戳不在 1 秒内,那么它们肯定不匹配。

如果以上没有帮助,请更新更多信息。

【讨论】:

【参考方案5】:

我遇到过这样的问题的唯一一次是我在项目处于发布模式时尝试调试。

【讨论】:

【参考方案6】:

如果您有一个“WebSite”项目,而不是“WebApplication”,我发现重叠的代码文件类可能会导致问题。有几种方法可以发生这种情况。不幸的是,Visual Studio 似乎仍然可以毫无错误地编译解决方案/项目。

    在网站上的文件夹之间移动页面。 移动页面后合并源代码管理可能会导致页面重复,并且 Visual Studio 在调试过程中会出现混乱。 复制和粘贴现有页面(模板)也可能导致内存出现此问题。

为了解决我的问题

    在解决方案中搜索“Class TheProblemPageCodeSymbolIssue”以查找重复项。 重构了类名后面的那些重复代码并测试了所有这些页面,以确保我可以使用调试断点。

希望对您有所帮助。

【讨论】:

以上是关于无法调试 - “断点当前不会被命中。没有为此文档加载任何符号”的主要内容,如果未能解决你的问题,请参考以下文章

vs2010无法调试JS,求解答。

VS2017无法调试

code blocks 无法调试

VS2013无法启动IIS调试,被拒绝访问

使用VS2013调试C语言时出错,连简单的Hello World都报错,调试时显示无法启动程序,无法访问

VS2008:无法启动调试,远程调试监视器已关闭