创建符号但调试永远不会在断点

时间:2016-04-28 17:41:45

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

如何让断点正常工作?

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

enter image description here

  

断点当前不会被击中。没有加载任何符号   对于这份文件。

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

  

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

     

已安装版本:专业

     

ASP.NET和Web Tools 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 Project System 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 Mobile   服务工具

     

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

     

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

     

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

     

NuGet References 1.0通过管理NuGet引用节省时间   直接来自Solution Explorer 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工具

以下是我的调试设置:

enter image description here enter image description here enter image description here enter image description here enter image description here

以下是我对项目的设置:

enter image description here enter image description here enter image description here

以下是我正在使用的软件包:

 <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未涵盖的其他参考文献:

enter image description here

  1. 解决方案由2个项目组成:consoleProject,classLibraryProject。
  2. consoleProject引用classLibraryProject。
  3. 当进入debug-&gt; windows-&gt; classLibraryProject的模块时,我收到消息“无法找到或打开PDB文件。
  4. 当手动为classLibraryProject构建PDB并将其移动到bin \ Debug for consoleProject时,我得到符号状态为“符号已加载”。 **但是,断点不受尊重。 **
  5. 是的,我确信代码是触发的,因为代码的副作用是可见的。
  6. 如何让断点正常工作?

11 个答案:

答案 0 :(得分:2)

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

enter image description here

我写的是因为我在屏幕上看不到。

比PLZ右键单击解决方案并选择“属性...” 你会看到那样的smth: enter image description here 检查项目的配置+平台是否相同,并选中“Build”复选框。如果选中了这个复选框,那么在你的解决方案的“干净构建”之后,你会在colsole应用程序的bin \ Debug文件夹中看到类似这样的smth:

enter image description here

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

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

enter image description here

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

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

enter image description here

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

enter image description here

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

我希望这会对你有帮助。

答案 1 :(得分:1)

你对我试图解决这个问题表示同情。当我将设置与我的设置进行比较时,我在Debugging | General中找到了2个不同之处:

  1. 检查:禁止模块加载时的JIT优化
  2. 取消选中:加载dll导出
  3. 第一个可能会解决您的问题。

答案 2 :(得分:1)

为什么会发生这种情况有不同的原因。我有同样的问题,其中一个可能的解决方案是删除所有.pdb和.idb文件

答案 3 :(得分:1)

您是否尝试取消选中调试&gt;选项一般&gt;要求源文件与原始版本完全匹配吗?

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

  1. 转到调试 - &gt; Windows - &gt;断点
  2. 在“断点”窗口中,单击“新建” - &gt;打破功能
  3. 输入完全限定的方法名称。
  4. 至少应该在方法开始时为您提供一个断点,然后您可以逐步完成。

    请注意,我总是会收到一条错误消息,告诉我在使用此技术时断点不起作用。但无论如何它都有效。

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

答案 6 :(得分:1)

我不知道你附加到这两个进程的位置。默认情况下,Visual Studio仅附加到启动项目。看来consoleProject是你的启动项目。在开始调试consoleProject之后,使用Debug菜单并选择"Attach to Process..."并选择与classLibraryProject对应的进程。断点现在可用。

Ctl+Alt+P是此快捷键。

答案 7 :(得分:0)

我不久前就遇到过这样的问题...而且我不确定我所执行的哪些事情实际上解决了这个问题。

但我能说的是,我发现(尽管packages.config条目看起来还不错)几个(!)使用的库不在正确的.net版本中(在我的情况下为net461

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

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

我确实记得,我在尝试修复问题时也将.Net升级到4.6.1 ...也许你也可以试试这个......但无论如何都要为你自己的库运行Target Framework Migrator(并且重新启动VS 2015就绝对值得一试。

祝你好运!

答案 8 :(得分:0)

我的解决方案是单击设备按钮左侧的按钮,

enter image description here

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

enter image description here

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

enter image description here

答案 9 :(得分:-1)

确保您的配置设置为Debug,而不是Release。

如果上述内容正确,请尝试此操作:工具 - &gt;选项 - &gt;调试 - &gt;符号和检查&#34; Microsoft符号服务器&#34;

答案 10 :(得分:-1)

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