未命中 Visual Studio 断点
Posted
技术标签:
【中文标题】未命中 Visual Studio 断点【英文标题】:Visual Studio breakpoints not being hit 【发布时间】:2014-03-02 03:58:40 【问题描述】:我正在处理一个 ASP.NET MVC 项目,该项目在附加到 IIS 进程 (w3wp.exe) 时似乎存在一些问题。我在我自己的本地机器上运行解决方案和 IIS 8.5,所以我认为这与我们的网络没有任何关系。对我来说奇怪的是,我能够在本地调试的任何其他解决方案上打断点。
我遇到的问题是断点变成红色的空心圆圈并且永远不会被击中。通常对此的修复是解决方案的清理/重建,但这没有奏效。我已经通过向页面添加“抛出新异常”并确保它显示异常来确认代码正在更新。同样,这个问题只发生在这个解决方案中。我运行调试器的任何其他解决方案都可以正常工作。我还尝试重新启动应用程序池、网站、IIS 以及我的计算机。
我读过的一些文章提到防病毒程序可以阻止远程调试器访问该进程。但是,整个设置都包含在我的本地计算机上,所以听起来这不是问题所在。不过这确实让我有些担心,因为我们最近聘请了一位新的 IT 人员,他一直在对每个人的机器进行大量更改。
另外一点需要补充的是,此 Web 应用程序的独特之处在于 IIS 中的绑定。绑定是“*”,以便利用与子域相关的一些自定义功能。
与此同时,我将继续寻找解决方案,但如果有人有任何想法可能导致该解决方案无法正确调试,我将不胜感激。
编辑:找到建议删除 ASP.NET 临时文件的解决方案。没有运气。
【问题讨论】:
类似问题***.com/questions/14107304/… 【参考方案1】:解决了。最终在调试菜单中选择了不正确的配置。我错误地将其切换到无法加载文档符号的发布配置。将其切换到调试配置,断点现在很好。
除了下面提到的 Abacus 之外,它还可能是一个混淆了您的构建的 web.config 转换。在我们的例子中,我们有从 web.config 的编译部分中删除 debug
属性的发布配置。下面是一个示例的屏幕截图和 Visual Studio 的构建配置下拉列表。
注意:还要确保您的平台与配置正确无误。就我而言,Dev.Debug|Mixed Platforms
没有正确构建解决方案,但 Dev.Debug|Any CPU
会。
【讨论】:
只是为了阐明解决此问题的步骤:项目、属性、构建、高级,检查“调试信息”的值。如果设置为“none”,则无法在 Visual Studio 中捕获代码。 谢谢。小错误却给了我很大的麻烦:) 哈哈。感谢这篇文章。刚刚解决了我的问题【参考方案2】:启用“托管兼容模式”。转到工具->选项->调试并启用托管兼容模式。
【讨论】:
【参考方案3】:我一直在努力解决这个问题。最后,这就是为我所做的。
选择 调试->选项->调试->常规
勾选 启用 .NET Framework 源代码步进。
(这可能是您需要做的所有事情,但如果您像我一样,您还必须执行下面所述的操作。以下解决方案还将修复您的项目加载旧程序集/.pdb 文件的错误,尽管重建和清洁。)
选择 工具 -> 选项 -> 项目和解决方案 -> 构建和运行,
取消勾选“仅在运行时构建启动项目和依赖项”的复选框,
从“On Run, when project are out of date”下拉菜单中选择 始终构建。
【讨论】:
这对我有用,虽然它确实减慢了启动调试的速度,在 docker 容器下运行......所以我不得不禁用它以更快地启动项目。 这对我有用。我不知道为什么设置似乎是随机更改的,但这解决了问题 你救我的命.. 或者我的星期六 这对我有用。我的调试器突然停止进入断点,我没有做任何更改,非常感谢。【参考方案4】:我知道这不是 OP 问题,但我在一个项目中遇到过这种情况。该解决方案有多个 MVC 项目,并且错误的项目被设置为启动。
我还将项目的配置设置为仅启动进程/调试器而不打开新的浏览器窗口。
所以从表面上看,调试器似乎正在启动,但它是为错误的进程启动的。因此,请检查并记住,您也可以附加到多个进程。
愚蠢的错误让我挠了挠头大约 30 分钟。
【讨论】:
【参考方案5】:在我的情况下,这个解决方案很有用:
解决方案:在调试/常规设置中禁用“仅我的代码”选项。
参考:c-sharpcorner
【讨论】:
【参考方案6】:通过取消选中该问题已解决
属性 > 构建 > 优化代码
在网页属性屏幕上设置(在常规下)。
【讨论】:
是的!我检查了它以查看它做了什么 - 忘了我点击它,几个月后无法弄清楚为什么它不会在任何调试点上停止!!!【参考方案7】:右键单击您的项目,然后左键单击属性,然后选择Web选项卡。
验证是否为您的案例选择了正确的服务器:
IIS 本地
IIS Express
【讨论】:
【参考方案8】:转到 Visual Studio 菜单:
调试 -> 附加到进程
然后点击选择按钮,如下图:
然后确保选中“自动确定要调试的代码类型”选项,如下所示:
【讨论】:
【参考方案9】:我的解决方案中的一个项目设置为发布模式。我把它改回 Debug 模式,现在断点正在命中。
【讨论】:
【参考方案10】:我在 Xamarin.Forms 项目中遇到了同样的问题。修复是手动将 PCL 从 .NET 4.6 转换为 .NET Standard 2.0。
对于 Visual Studio Mac:确保为每个项目都这样做
【讨论】:
【参考方案11】:在 Visual Studio 2017 中,您需要确保您未处于发布配置模式。
-
打开构建菜单 ddl
点击配置管理器
从“发布”更改为“调试”
【讨论】:
【参考方案12】:在我的场景中,我在一个解决方案中拥有一个 MVC 应用程序和 WebAPI,并且我使用的是本地 IIS(不是 express)。
我还在 IIS 中将站点设置为真实域,并编辑了我的主机文件,以便我可以输入真实域并且一切正常。 我还注意到两件事:
MVC 代码调试工作正常。
附加到进程也很完美。就在我调试时,它没有在我的 API 中遇到断点。
这是我的解决方案:
右键 webapi 项目 > 属性 > Web > 项目 URL
默认情况下它指向 localhost,但是由于我在 IIS 中设置了站点,所以我忘记将 URL 更改为网站域(即,而不是 locahost,它应该说 http://domain-name/) .
【讨论】:
【参考方案13】:如果有人使用 Visual Studio 2017 和 IIS 并尝试调试网站项目,则以下内容对我有用:
-
将网站项目附加到 IIS。
使用 File -> Add -> Existing Web Site... 将其添加到解决方案中,然后从
inetpub/wwwroot
目录中选择项目。
在解决方案资源管理器中右键单击网站项目并选择属性页 -> 开始选项
点击Specific Page并选择启动页面(服务使用Service.svc,网站使用Default.aspx或您选择的页面的自定义名称)。
点击使用自定义服务器并编写
http(s)://localhost/(在 IIS 中显示的网站名称)
例如:http://localhost/MyWebSite
就是这样!不要忘记确保网站正在 IIS 上运行,并且您要调试的网站被选为启动项目(右键单击 -> 设置为启动项目)。
原帖:How to Debug Your ASP.NET Projects Running Under IIS
【讨论】:
【参考方案14】:就我而言,我有一个长度为 70kb 的字符串。编译器没有抛出任何错误。但是 Debugger 未能达到断点。在花了 3 个小时抓挠头发后,我找到了没有达到断点的原因。删除70kb数据后断点正常工作。
【讨论】:
【参考方案15】:如果以上都不起作用,请仔细检查您的代码。有时断点似乎没有命中的原因是由于有时无意的原因导致包含断点的代码块没有被执行。
例如,我在复制和粘贴代码时忘记了“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
【讨论】:
【参考方案16】:如果您没有在 VS2017 中登录您的 Microsoft 帐户,则在附加到 IIS 进程时不能命中断点。
【讨论】:
【参考方案17】:在我的情况下,实际过程与最初启动的过程不同。
通常我们通过w3wp.exe
进程绑定本地托管服务。就我而言,使用了自定义流程。改成这样就解决了问题。
还有一件事,从 Release 模式更改为 Debug 模式。在发布模式下,PDB 文件不会使用断点详细信息进行更新。因此,请确保您在 Debug 模式下调试您的应用程序。
【讨论】:
【参考方案18】:右键单击您的项目,然后左键单击属性,然后选择Web选项卡。 调试器 > ASP.NET
【讨论】:
【参考方案19】:这里没有提到我的情况: 由于来自第三方站点的回调,我必须在假域上运行 Web 项目(在 IIS 和 /hosts/etc 上设置)。
我在 VS 的进程列表中看到了两个 w3wp 进程: w3wp.exe 用户名:IIS APPPOOL\默认应用程序池 w3wp.exe 用户名:IIS APPPOOL.svc
我必须手动附加到第二个才能进行调试。
所以我意识到我在 iis 中的 Fake 域的应用程序池没有设置为“默认应用程序池”
https://manage.accuwebhosting.com/knowledgebase/2532/How-to-change-application-pool-from-IIS.html
我将域的应用程序池更改为“默认应用程序池”后,Visual Studio 就开始调试 Web 应用程序。
【讨论】:
【参考方案20】:如果您的任何组件是强命名(签名),那么所有组件都需要。如果您像我一样添加一个项目并从一个强命名项目/组件中引用它,而忽略对您的新组件进行签名,那么调试将就好像您的新组件是外部组件一样,您将无法进入它.因此,请确保您的所有组件都已签名,或者没有。
【讨论】:
【参考方案21】:也可能(我的同事就是这种情况)您出于任何原因禁用了符号的自动加载。
如果是这样,请打开Tools -> Options -> Debugging -> Symbols
重新启用它并将单选按钮移动到“加载所有模块,除非排除”
【讨论】:
【参考方案22】:在一个解决方案中有 20 多个项目的情况下,我将项目(我想调试)包含在解决方案启动中
右键解决方案-->启动项目->多个启动项目->要调试的项目选择“开始”在行动。
现在您应该能够达到这些断点,尤其是可能是辅助类的项目。
【讨论】:
【参考方案23】:在某些情况下,问题出在 IIS 中。如果您的调试工作并突然停止工作,请使用IISReset 重置 IIS 线程池。
【讨论】:
【参考方案24】:我不想承认错过了这么简单的东西,但希望这会对其他人有所帮助。就我而言,我使用的是本地 IIS,并且网站在应用程序池上运行,因此当您将调试器附加到进程时,请务必选中“显示所有用户的进程”,以便您可以选择适当的进程。
【讨论】:
【参考方案25】:就我而言,将解决方案平台从 x86 更改为 Any Cpu 解决了这个问题。
【讨论】:
【参考方案26】:我刚刚遇到了这个问题。对我有用的是将 Active Solution Platform 更改为 x86 而不是 AnyCPU;
-
点击构建
点击配置管理器
从 Active Solution Platform 组合框中选择 x86。
【讨论】:
【参考方案27】:断点可能不会被命中的另一个原因:我用对项目的引用替换了对 DLL 的引用。构建时,没有创建 PDB 文件,因此没有命中断点。问题是我忘记对解决方案中的其他项目做同样的事情。替换所有项目中的引用(DLL >> 项目)后,PDB 已创建并且断点按预期工作。
【讨论】:
以上是关于未命中 Visual Studio 断点的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 当前不会命中断点的问题 编辑pdf文件
我可以在 Visual Studio“当命中”断点中像 $FUNCTION(带有完整签名)一样格式化 $CALLER 吗?