【问题标题】:symbols are created but debugging never stops at break point创建了符号,但调试永远不会在断点处停止
【发布时间】:2016-04-28 17:41:45
【问题描述】:

如何让断点工作?

在调试模式下运行 C# 控制台应用程序时收到此消息:

当前不会命中断点。未加载任何符号 用于此文档。

以下是与此问题相关的其他规范:

Microsoft Visual Studio Professional 2015 版本 14.0.25123.00 更新 2 Microsoft .NET 框架版本 4.6.01055

安装版本:专业版

ASP.NET 和 Web 工具 2015.1 (Beta8) 14.1.11106.0 ASP.NET 和 Web 工具 2015.1(Beta8)

ASP.NET Web 框架和工具 2012.2 4.1.41102.0 更多 信息,请访问http://go.microsoft.com/fwlink/?LinkID=309563

ASP.NET Web 框架和工具 2013 5.2.40314.0 更多 信息,请访问http://www.asp.net/

代码对齐 12.1 代码对齐帮助你展示你的代码 精美,增强了清晰度和可读性。

CodeMaid 10.1.93 CodeMaid 是一个开源的 Visual Studio 扩展 清理和简化我们的 C#、C++、F#、VB、PHP、PowerShell、R、JSON、 XAML、XML、ASP、HTML、CSS、LESS、SCSS、JavaScript 和 TypeScript 编码。

Common Azure Tools 1.7 提供 Azure 使用的常用服务 移动服务和 Microsoft Azure 工具。

ConfigurationTransform 1.3 期间自动转换app.config 构建过程。设置转换后,它将在其他设备上运行 构建没有扩展的机器。

GitHub.VisualStudio 1.0 一个 Visual Studio 扩展,它带来了 GitHub 流入 Visual Studio。

JavaScript 语言服务 2.0 JavaScript 语言服务

JavaScript 项目系统 2.0 JavaScript 项目系统

JetBrains ReSharper Ultimate 10.0.2 Build 104.0.20151218.120627 适用于 Microsoft Visual Studio 的 JetBrains ReSharper Ultimate 包。为了 有关 ReSharper Ultimate 的更多信息,请访问 http://www.jetbrains.com/resharper。版权所有 © 2016 JetBrains, Inc.

Microsoft Azure 移动服务工具 1.4 Microsoft Azure 移动 服务工具

Node.js 工具 1.1.31117.00 添加对开发和调试的支持 Visual Studio 中的 Node.js 应用

Node.js 工具 - 分析 1.1.31117.00 对 Node.js 的分析支持 项目。

NuGet 包管理器 3.4.3 Visual Studio 中的 NuGet 包管理器。 有关 NuGet 的更多信息,请访问http://docs.nuget.org/

NuGet 引用 1.0 通过管理 NuGet 引用来节省时间 直接来自解决方案资源管理器 packages.config

PreEmptive Analytics Visualizer 1.2 Microsoft Visual Studio 扩展以可视化来自 PreEmptive 的聚合摘要 分析产品。

SQL Server 数据工具 14.0.60311.1 Microsoft SQL Server 数据工具

StyleCop 4.7 提供源代码样式和一致性工具。看 https://github.com/Visual-Stylecop/Visual-StyleCop了解更多详情。

TypeScript 1.8.30.0 用于 Visual Studio 的 TypeScript 工具

这是我的调试设置:

这是我对项目的设置:

这是我正在使用的软件包:

 <package id="EntityFramework" version="6.1.3" targetFramework="net452" />
  <package id="log4net" version="2.0.3" targetFramework="net452" />
  <package id="Magnum" version="2.1.3" targetFramework="net452" />
  <package id="MassTransit" version="2.9.9" targetFramework="net452" />
  <package id="MassTransit.Log4Net" version="2.9.9" targetFramework="net452" />
  <package id="MassTransit.MSMQ" version="2.9.0" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="6.0.6" targetFramework="net452" />

nuget 未涵盖的其他参考:

  1. 该解决方案由 2 个项目组成:consoleProject、classLibraryProject。
  2. consoleProject 引用 classLibraryProject。
  3. 当我进入 debug->windows->Modules for classLibraryProject 时,我收到消息“无法找到或打开 PDB 文件。
  4. 当为 classLibraryProject 手动构建 PDB 并将其移动到 consoleProject 的 bin\Debug 中时,我得到一个符号状态“已加载符号”。 **但是,不支持断点。 **
  5. 是的,我确信代码被触发是因为代码的副作用是可见的。

如何让断点工作?

【问题讨论】:

  • 我几乎觉得如果你没有遇到过这个问题,那么你就没有去过硬敲学校。我一直得到这个。我通常只是剧烈摇晃我的机器,直到它决定工作为止。
  • 您的两个项目都针对 .NET 4 或更高版本吗?
  • 我在您的设置中看不到任何奇怪的设置。我会简化解决方案以创建最小的复制。然后从头开始,添加引用,创建相同的复制并查看是否产生相同的行为。我还会检查 csproj 文件和 app.config 是否有任何奇怪的设置。
  • 很难猜出您是如何“手动构建 PDB”或为什么必须手动复制它的。在项目符号 3 中,右键单击模块列表中的 DLL,然后选择“符号加载信息”。粘贴您在问题中看到的内容。不要混淆任何东西。
  • 你是如何从控制台项目中引用类库的?项目参考还是dll参考?正如@Artyom 在他的回答中提到的那样,您分享的屏幕截图中没有看到参考。

标签: c# .net visual-studio debugging visual-studio-2015


【解决方案1】:

我刚刚创建了新的控制台应用程序 + 类库。请确保控制台应用程序在类库中有引用(如图像上)

我之所以这么写是因为我在你的屏幕上看不到。

比请右键单击解决方案并选择“属性...” 你会看到这样的: 检查您的项目的配置 + 平台是否相等,并且复选框“构建”都已选中。如果选中该复选框,那么在您的解决方案“干净构建”之后,您将在 colsole 应用程序的 bin\Debug 文件夹中看到类似的内容:

请注意类库有 2 个文件(在屏幕上突出显示):dll + pdb。在这种情况下,dll+pdb 处于同步状态,您的断点将在类库代码中工作。

如果您在构建后没有类库项目的 pdb 文件,那么您对类库的引用可能不是对 VS 项目的引用。请检查您是否正确添加了参考(如图片所示):

不要通过“浏览”对话框直接引用类库的 dll 文件。

您可以检查您的控制台应用程序是否在类库项目中正确引用 - 请在编辑时打开控制台应用程序 csproj 文件并查看参考:

如果您有 BAD 引用(在 .dll 文件上):

而不是通过 VS 中的上下文菜单删除该引用并添加正确的引用。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我很同情你试图解决这个问题。当我将设置与我的设置进行比较时,我发现 Debugging|General 有 2 处不同:

    1. 检查:抑制模块加载时的 JIT 优化
    2. 取消选中:加载 dll 导出

    第一个可能会解决您的问题。

    【讨论】:

      【解决方案3】:

      发生这种情况的原因有很多。我遇到了同样的问题,可能的解决方案之一是删除所有 .pdb 和 .idb 文件

      【讨论】:

        【解决方案4】:

        您是否尝试取消选中选项“调试”>“常规”>“要求源文件与原始版本完全匹配”?

        【讨论】:

        • 我没有,但为什么我会呢?
        • 调试时有时源代码和bin中加载的代码不一样,妨碍调试,你可以试试这个。
        • 非常有趣。会尽力让你知道
        • 你试过了吗?运气好吗?
        【解决方案5】:

        我以前在框架代码中遇到过这个问题。试试这个:

        1. 转到调试 -> 窗口 -> 断点
        2. 在 Breakpoint 窗口中,单击 New -> Break at Function
        3. 输入完全限定的方法名称。

        这至少应该让你在方法的开始有一个断点,然后你可以单步执行。

        请注意,我总是收到一条错误消息,告诉我使用此技术时断点不起作用。但它仍然有效。

        请注意,我确实加载了有效符号,因此请务必使用告诉您符号已加载的设置。

        【讨论】:

          【解决方案6】:

          只是大声思考,我遇到了以下情况,这意味着没有调试: 这些是一般情况,并不特定于任何环境。

          • 系统内存不足,因此 JIT 不会进入调试模式。尽可能增加服务器的内存设置。
          • 部署不会以某种方式替换旧版本,绕过构建脚本并手动物理删除工件。创建一个新的工件并手动部署它。
          • 构建脚本不会覆盖旧的类/二进制文件,它们来自 maven 样式缓存或其他仓库。删除对这些文件的所有引用,然后重试。
          • 正在构建类,但这些类没有被包装到最终对象中,再次删除最终对象并调整构建脚本以消除此错误。
          • 版本控制(某些服务器)不允许部署新的工件,请确保每次部署都会增加版本并重试。
          • 您正在部署的服务器不是您要连接到每个调试会话的位置,错误的端口或其他侦听问题。停止服务器以查看会话是否确实在您认为的位置。
          • 同样来自版本控制,如果您标注日期的人工制品与服务器日期不一致 - 例如延迟一个小时,那么它可能不会再次部署,或者部署将不稳定。

          如果我想到其他人,我会在这里发帖。

          【讨论】:

            【解决方案7】:

            我没有看到您在哪里附加到这两个进程。默认情况下,Visual Studio 只会附加到启动项目。看来 consoleProject 是您的启动项目。开始调试consoleProject 后,使用Debug 菜单并选择"Attach to Process..." 并选择与classLibraryProject 对应的进程。断点现在可用。

            Ctl+Alt+P 是这个的快捷键。

            【讨论】:

              【解决方案8】:

              不久前我遇到过这样的问题......我不确定我执行的哪些操作实际上解决了这个问题。

              但我可以说的是,我发现(尽管 packages.config 条目看起来还不错)几个(!)使用的库不在正确的 .net 版本中(在我的例子中是 net461)。

              我使用了一个名为 Target Framework Migrator 的工具来解决这个问题。您可以通过工具 => 扩展和更新 => 在线 => Visual Studio Gallery 获得它

              然后在搜索字段中输入Target Framework Migrator

              我确实记得,在尝试解决问题的过程中,我还将 .Net 升级到了 4.6.1……也许您也可以尝试一下……但无论如何,为您自己的库运行目标框架迁移器(并在途中重新启动VS 2015)绝对值得一试。

              祝你好运!

              【讨论】:

                【解决方案9】:

                我的解决方案是点击设备按钮左侧的那个按钮,

                我从下拉菜单中选择了编辑方案

                然后我从弹出窗口左侧的列表中选择“运行”,并选中“调试可执行文件”框(之前未选中)

                【讨论】:

                  【解决方案10】:

                  确保您的配置设置为调试,而不是发布。

                  如果以上正确,试试这个:工具->选项->调试->符号并检查“Microsoft符号服务器”

                  【讨论】:

                    【解决方案11】:

                    对于这样的异常情况,清理解决方案非常值得(包括手动删除 bin 和 obj 文件夹,然后重新启动。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2013-09-26
                      • 1970-01-01
                      • 1970-01-01
                      • 2023-03-12
                      • 2018-08-11
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-03-31
                      相关资源
                      最近更新 更多