Visual Studio 断点无法命中

100
我正在使用一个ASP.NET MVC项目,连接到IIS进程(w3wp.exe)时似乎出现了一些问题。 我在自己的本地机器上运行解决方案和IIS 8.5,因此我认为这与我们的网络无关。对我而言奇怪的是,我可以在任何其他本地调试的解决方案中触发断点。
我遇到的问题是断点变成了红色的、空心的圆圈,并且永远不会被触发。通常修复此问题的方法是清理/重建解决方案,但这没有起作用。通过将"throw new Exception"添加到页面来确认代码是否被更新并确保它显示该异常。同样,这个问题只发生在这个解决方案中。任何其他解决方案我运行调试器都能正常工作。我还尝试过重新启动应用程序池,网站,IIS以及我的计算机。
我阅读的一些文章中提到,反病毒程序可能会阻止远程调试器访问该进程。但是,整个设置都包含在我的本地机器上,因此似乎不是问题所在。但最近我们雇了一位新的IT人员,他一直在修改所有人的电脑,这令我有点担忧。
另外,这个Web应用程序的绑定在IIS中有一个独特的点。绑定是 "*",以利用与子域相关的一些自定义功能。
与此同时,我将继续寻找解决方案,但如果有任何人有想法可以导致这个解决方案无法正确调试,我真的很感激。
编辑:找到了一个建议删除ASP.NET临时文件的解决方案。没有运气。

类似的问题:https://dev59.com/IGYq5IYBdhLWcg3w5kpm - Michael Freidgeim
33个回答

3
在我的解决方案中,我有一个项目被设定为发布模式。我将其改回调试模式,断点现在能够正常触发了。

2
在我的情况下,我有一个MVC应用程序和WebAPI在一个解决方案中,并且我正在使用本地IIS(而非express)。
我还将站点设置为真实域,并编辑了我的主机文件,以便我可以输入真实域并且一切正常。我还注意到了两件事:
1. MVC代码调试工作得非常完美。 2. 附加到进程也完美地工作。只是当我在调试时,它没有触发我的API断点。
这对我来说是解决方案:
右键单击webapi项目>属性>Web>项目URL
默认情况下,它指向localhost,但由于我在IIS中设置了站点,我忘记更改URL以指向网站域名(即不是localhost,而是应该是http://{domain-name}/)。

1

在我的情况下,我有一个长度为70kb的字符串。编译器没有报错。但是调试器无法触发断点。在花费了3个小时并抓狂之后,我找到了不触发断点的原因。在删除了70kb数据后,断点正常工作了。


1

可能也有这种情况(我的同事就是这样),你可能因为某些原因禁用了符号的自动加载。

如果是这样,请打开工具 -> 选项 -> 调试 -> 符号并将单选按钮移动到"加载所有模块,除非排除"重新启用它

enter image description here


1
我不太情愿承认错过了这么简单的东西,但希望这能帮助其他人。在我的情况下,我正在使用本地 IIS,并且网站正在运行在一个应用程序池中,因此当您将调试器附加到进程时,请务必选中“显示所有用户的进程”复选框,以便您可以选择适当的进程。

"Attach to Process" with "Show processes from all users" checkmarked


我尝试了很多方法,浪费了三个小时才找到这个解决办法。通常在调试时,我会看到诊断工具短暂地打开,然后关闭。我手动附加到w3wp,运行我的Web应用程序,然后断点生效了。 - undefined

1
如果有人正在使用Visual Studio 2017和IIS并尝试调试Web站点项目,则以下步骤适用于我:
  1. 将Web站点项目附加到IIS。
  2. 使用文件 -> 添加 -> 现有网站...将其添加到解决方案中,并从inetpub / wwwroot目录中选择该项目。
  3. 在解决方案资源管理器中右键单击Web站点项目,然后选择属性页面 -> 启动选项
  4. 单击特定页面,然后选择启动页面(对于服务,请使用Service.svc,对于网站,请使用Default.aspx或您选择的自定义页面名称)。
  5. 单击使用自定义服务器并编写

http(s)://localhost/(在IIS中显示的网站名称)

例如:http://localhost/MyWebSite 那就这样了!不要忘记确保网站正在IIS上运行,并选择您希望调试的网站作为启动项目(右键单击 -> 设置为启动项目)。
原始帖子:如何在IIS下调试ASP.NET项目

1

点击调试。 选择 [调试]。 选择 [常规]。 禁用 "仅限我的代码" 单击 [确定] 并重新构建项目。


0

我的情况在这里没有提到:
由于第三方网站的回调,我必须在虚假域上运行Web项目(在IIS和/hosts/etc上设置)。

在VS的进程列表中,我看到了两个w3wp进程:
w3wp.exe 用户名:IIS APPPOOL\Default app pool
w3wp.exe 用户名:IIS APPPOOL.svc

我必须手动附加到第二个进程才能进行调试。

因此,我意识到我在iis中的虚假域的应用程序池没有设置为“默认应用程序池”。

enter image description here

https://manage.accuwebhosting.com/knowledgebase/2532/How-to-change-application-pool-from-IIS.html

当我将该域的应用程序池更改为“默认应用程序池”时,Visual Studio 开始调试 Web 应用程序。


0

在我的情况下,实际过程与原始启动过程不同。

通常我们通过 w3wp.exe 进程绑定本地托管服务。在我的情况下,使用了自定义进程。更改为该进程解决了问题。

还有一件事,从 Release 模式切换到 Debug 模式。在发布模式下,PDB 文件不会更新断点详细信息。因此,请确保您在 Debug 模式下调试应用程序。


0

在你的项目上右键,然后左键点击属性,选择Web选项卡。 调试器 > ASP.NET


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接