【问题标题】:Visual Studio 2013 not hitting breakpointsVisual Studio 2013 没有遇到断点
【发布时间】:2015-02-26 03:25:22
【问题描述】:

我正在使用 Visual Studio 2013 中的 ASP.NET 解决方案,该解决方案未能命中断点。 Visual Studio 将成功地在其他解决方案上打断点,并且此解决方案中的断点以前有效。但此时它们无法正常工作。

我使用的是 Visual Studio 2013 Ultimate,Update 4。它安装在 64 位 Windows 8.1 上。

这是一个包含 3 个项目的 MVC 解决方案:BusinessEntities、DataAccessLayer (DAL) 和一个 Web 项目。所有这些项目中的断点都不起作用。我什至在 Home 控制器的 Index ActionResult 中尝试了一个断点,但仍然无法在断点处停止。

在 Visual Studio 功能区中,解决方案配置设置为调试。此外,配置管理器显示我的所有 3 个项目都将配置设置为调试。重新启动 IIS、重新启动 Visual Studio 和重新启动都不能解决此问题。选择 Build > Clean Solution、Build > Rebuild,然后选择 Debug > Start Debugging 也没有修复它。

在 web.config 中,此节点中的 debug 设置为 true:

  <system.web>
      <compilation debug="true" targetFramework="4.0" />

我的项目的 bin 目录中有 .pdb 文件。我验证了在清理解决方案时它们会被删除,并在重建时重新创建。

我还需要检查什么?我真的需要让断点在这个解决方案中工作。谢谢。

========

2014 年 12 月 30 日更新 - 以下是我在 @paul.abbott.wa.us 的 cmets 之后尝试的几件事。为了清楚起见,我删除了我制作的几个 cmets 并在此处附加。

========

我通过 VS 启动应用程序,并在 IIS 下运行它。 IIS 的版本是 8.5。公开进程名称时(通过 System.Diagnostics.Process.GetCurrentProcess().ProcessName),它是 w3wp。

在 IIS 中,Web 应用程序有一个类似“local.mysite”的站点名称,并且在我的主机文件中有一个匹配的条目。该站点使用 DefaultAppPool,它采用 .NET CLR 4.0 版和集成托管管道模式。我的解决方案中的 3 个应用程序针对 .NET Framework 4。

如果我将它切换回 IIS Express,调试器就会开始工作。 IIS版本改为8.0,进程名当然是iisexpress。从技术上讲,我不必在我的工作站上的 IIS 下运行它,但我更愿意这样做。我在 IIS 中配置错误或忽略了哪些可能导致调试器失败的原因?

查看属性页的 Web 选项卡上的项目服务器设置,我注意到下拉菜单设置为“IIS Express”。将其切换到“本地 IIS”后,系统提示我以管理员身份运行 VS。之后,我能够将服务器更改为本地 IIS,并点击调试器。我签入了更改,关闭了 VS,启动了 VS 未以管理员身份运行,并加载了解决方案。 Web 项目加载失败并显示以下消息:Web 应用程序项目 [MySiteName] 配置为使用 IIS。无法访问 IIS 元数据库。您没有足够的权限访问您机器上的 IIS 网站。

最终,本网站的某些部分将采用 Active Directory 身份验证。那么,如果我希望在 IIS 下运行站点,我需要在 IIS Express 下运行站点还是始终以管理员身份运行 VS 的解决方案是什么?谢谢。

我找到了解决“Web 应用程序项目 [MyApp] 配置为使用 IIS。无法访问 IIS 元数据库。您没有足够的权限访问您机器上的 IIS 网站。”按照此帖子中的步骤操作。 Error - Unable to access the IIS metabase

授予我的帐户对 intetsrv\config 文件夹的访问权限后,Web 项目在 Visual Studio 中正确加载,无需以管理员身份运行 VS。

但是现在当我启动该站点时,会出现另一个警告:“无法在 Web 服务器上开始调试。 IIS 不会列出与启动的 URL 匹配的网站。单击帮助以获取更多信息。”最初我只是单击“创建虚拟目录”并再次启动,但同样的警报再次出现。

所以我从警报中选择了帮助按钮。这导致了this MSDN page,它提出了大约 2 打东西要检查,与其他文章的链接大约是一半。我现在感觉有点像爱丽丝梦游仙境,朝着兔子洞走得更远。

2/3/2015 更新:我在本地 IIS 实例上运行此程序时的解决方法是以管理员身份运行 Visual Studio。最终,我们将应用程序更改为使用 IIS Express,然后放弃该应用程序,转而使用同事构建的另一个解决方案。这个决定与这个问题无关。感谢大家的反馈和想法。

2016 年 3 月 7 日更新:目前我无法复制此问题,因为我们不再拥有去年我处理该问题时的状态的解决方案。如果版主能结束这个问题,我将不胜感激。关闭此选项的选项与我当前的情况不符,但如果遇到这种情况,也许其他人会发现下面的建议很有用。感谢所有提出建议的人。

【问题讨论】:

  • 您是通过 VS 启动应用程序还是手动将调试器连接到 w3wp.exe?您使用的是 IIS 还是 Express?
  • 谢谢保罗。我按照您的建议尝试了几件事,并将它们附加到原始帖子中。见上文。
  • 断点是否显示为红色圆圈(未填充)
  • 黑暗中的一枪 - 关闭“只是我的代码”调试器选项。您也可以查看lowleveldesign.wordpress.com - 这是我认为对 .NET 调试有深入了解的人的博客。

标签: asp.net-mvc debugging visual-studio-2013


【解决方案1】:

根据我以前的经验,请考虑以下几点:

  • 检查您是否已将断点放置在正确的位置,并且您正在运行相应的页面或控制器
  • 右键单击断点 => 位置 => 选中“允许源代码与原始版本不同”。如果你安装了 resharper ,可能会有帮助。

  • 如果你是通过ajax调用,确保页面没有java-script错误(这个IE默认catch js错误)

  • 有时是因为施工不彻底,所以清理 解决方案(右键单击解决方案并选择“clean solution” 项目)然后是“Rebuild Solution”。

  • 有时是因为您可能禁用了 一些类库,所以在这种情况下你需要重建那些 类库专门。 (您可以通过检查选择找到它 “Build”菜单中的“Configuration Manager”项)

希望这些帮助

【讨论】:

    【解决方案2】:

    我之前遇到过这个问题,重建解决方案包后解决了。(右键单击解决方案包并运行重建)

    【讨论】:

    • 可以反编译.dll文件,查看编译过程是否正常。
    【解决方案3】:

    这是我为这种场合保留的想法清单。

    检查您的 dll 是从哪里引用的,并确保这是您尝试调试的代码。

    在构建时检查您是否处于正确的模式:调试/发布,因为它们可能会将 dll 放在不同的位置。

    您是否参与了正确的流程?

    对于 IIS 上的网站,您正在处理的代码是否与在 IIS 中运行的代码相同?

    转到 Debug > Windows > Modules,如果相关的 dll 在那里,右键单击它并加载符号。 如果它不在列表中,请尝试运行代码。有时即使它说断点不会被命中,这只是因为在你进入需要它的场景之前没有加载 dll。尝试依赖于 dll 的场景,它可能只是命中断点。

    重新启动浏览器。您可能从较旧的 dll 中缓存了一些内容。

    【讨论】:

      【解决方案4】:

      确保:

      1. 工具 -> 选项调试器“仅启用我的代码”未选中
      2. 您正在调试模式而不是发布模式运行应用程序
      3. 解决方案版本是最新的

      【讨论】:

        猜你喜欢
        • 2023-04-10
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        • 1970-01-01
        • 2022-08-11
        • 1970-01-01
        • 2013-11-21
        • 2014-08-02
        相关资源
        最近更新 更多