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个回答

0
对我来说,这是测试残留物。我尝试了不同的框架,在控制台应用程序中将目标框架更改为.NET Standard,出于一些愚蠢的原因。当我回来尝试调试时,断点无法工作。改回.NET 7解决了这个问题。改为任何实际支持适当执行的内容也将解决它。令人惊讶的是,我仍然可以像那样运行它。
我在我的.csproj文件中有这个:
<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

更改 TargetFramework 属性:

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>

0
如果以上方法都不起作用,那就仔细检查你的代码。有时候断点没有被触发的原因是包含断点的代码块由于某些无意识的原因没有被执行。
例如,在复制和粘贴代码时忘记了“Handles Me.Load”这一行,这个问题曾经困扰过我几次。
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    --this block of code will not execute
    End Sub 

对比

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    --this block executes
    End Sub

0

如果您在VS2017中未登录Microsoft帐户,则无法在附加到IIS进程时触发断点。


我没有找到任何证据支持这一点。 - Orthmius

0
如果您的任何组件都是强名称(已签名),则所有组件都需要进行签名。如果您像我一样添加了一个项目并从强名称项目/组件引用它,但忽略了对新组件进行签名,则调试时会像您的新组件是外部组件一样,并且您将无法进入其中。因此,请确保所有组件都已签名,或者全部未签名。

enter image description here


0
在我的情况下,一个解决方案中有20多个项目,我将需要调试的项目包含在解决方案启动项中。
右键单击解决方案->启动项->多启动项目->选择要调试的项目中的“启动”操作。
现在,您应该能够调试那些断点,特别是一些辅助类项目。

0

在某些情况下,问题出现在IIS中。如果您的调试工作正常,但突然停止工作,请使用IISReset重置IIS线程池。


0
在我的情况下,将解决方案平台从x86更改为任何CPU解决了问题。

0

0

删除项目的 bin 和 objects 文件夹可能会有帮助。


0
另一个断点无法命中的原因是由于您调试的网站与您认为调试的网站不同,这可能是由于站点链接中的异常引起的。例如:假设在启动调试器时,它通常会启动本地主机页面(如浏览器地址栏中所示)。如果到达断点代码需要先单击该本地主机页面上的链接以转到另一个页面,则必须确保单击后浏览器仍指向本地主机。如果不是,则永远无法命中断点,您需要先修复链接。这是一个明显的问题,但很容易被忽视。

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