Visual Studio断点没有被击中

时间:2014-02-05 15:56:33

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

我正在使用ASP.NET MVC项目,该项目在附加到IIS进程(w3wp.exe)时似乎存在一些问题。我在我自己的本地计算机上运行解决方案和IIS 8.5,所以我不认为这与我们的网络有任何关系。对我来说很奇怪的是,我能够在本地调试的任何其他解决方案上达到断点。

我所拥有的问题是断点变成红色,空心圆圈而且永远不会被击中。通常,对此的修复是对解决方案的清理/重建,但这没有奏效。我已经确认通过向页面添加“throw new Exception”并确保它显示异常来更新代码。同样,这个问题只发生在这个问题上。我运行调试器的任何其他解决方案都可以正常工作。我也尝试重新启动应用程序池,网站,IIS以及我的计算机。

我读过的一些文章提到反病毒程序可以阻止远程调试器访问进程。但是,整个设置都包含在我的本地计算机上,因此听起来不像是问题。它确实让我有点担心,因为我们最近聘请了一位新的IT人员,他们对每个人的机器进行了很多改动。

另外一点要说明这个Web应用程序的独特之处在于IIS中的绑定。绑定是“*”,以便利用与子域相关的一些自定义功能。

与此同时,我会继续寻找解决方案,但如果有人有任何想法可能会导致这个解决方案无法正常调试,我真的很感激。

编辑:找到建议删除ASP.NET临时文件的解决方案。没有运气。

22 个答案:

答案 0 :(得分:60)

解决。结束是在调试菜单中选择的错误配置。我错误地将其切换到无法加载文档符号的发布配置。将它切换到调试配置,现在断点就好了。

要添加Abacus下面提到的内容,它也可能是一个搞乱你的构建的web.config转换。在我们的示例中,我们使用Release配置从web.config的编译部分中删除debug属性。下面是一个示例和Visual Studio的构建配置下拉列表的屏幕截图。

注意:还要确保您的平台与配置一致。在我的情况下,Dev.Debug|Mixed Platforms无法正确构建解决方案,但Dev.Debug|Any CPU会。

Build Configuration List

答案 1 :(得分:28)

启用'托管兼容模式'。转到工具 - >选项 - >调试并启用托管兼容模式。

答案 2 :(得分:16)

我知道这不是OP的问题,但我在项目中发生了这种情况。该解决方案有多个MVC项目,错误的项目被设置为启动。

我还设置了项目的配置以启动进程/调试器而不打开新的浏览器窗口。

Visual Studio Project Properties

所以表面上看起来好像调试器正在启动,但是对于错误的进程它是这样做的。因此请检查并记住您也可以附加到多个进程。

愚蠢的错误让我挠头约30分钟。

Attach to both processes

答案 3 :(得分:15)

我一直在努力解决这个问题。最后这就是为我做的事情。

选择 调试 - >选项 - >调试 - >常规

勾选 启用.NET Framework源代码。

(这可能就是你需要做的所有事情,但如果你像我一样,你也必须做下面所述的。下面的解决方案也将修复你的项目加载旧程序集/ .pdb文件的错误,尽管重建和清洁。)

选择 工具 - >选项 - >项目和解决方案 - >构建并运行

Untick 仅构建启动项目和依赖于运行”的复选框,

从“运行时,项目已过期”下拉菜单中选择 始终构建

答案 4 :(得分:8)

右键单击您的项目,然后左键单击属性,然后选择 Web 标签。

验证是否为您的案例选择了正确的服务器:

  • IIS Local

  • IIS Express

答案 5 :(得分:3)

转到Visual Studio菜单:

调试 - >附加到流程

然后点击选择按钮,如下图所示:

Attach to process

然后确保选中“自动确定要调试的代码类型”选项,如下所示:

Select code type

答案 6 :(得分:2)

通过取消选中

解决了该问题

属性>构建>优化代码

在网页属性屏幕上设置(在常规下)。

Screenshot.

答案 7 :(得分:2)

我在Xamarin.Forms项目中遇到了同样的问题。该修复程序是手动将PCL从.NET 4.6转换为.NET Standard 2.0。

PCL Advanced Build Configuration

对于Visual Studio Mac:确保为每个项目执行此操作

mac-screenshot

答案 8 :(得分:1)

在我的场景中,我在一个解决方案中有一个MVC应用程序和WebAPI,而我正在使用本地IIS(不是快速)。

我还将IIS中的站点设置为真实域,并编辑了我的主机文件,以便我可以输入真实域名,一切正常。 我还注意到了两件事:

  1. MVC代码调试工作正常。

  2. 附加到过程也很完美。就在我调试时,它没有在我的API中遇到断点。

  3. 这是我的解决方案:

    右键单击webapi项目>属性>网络>项目网址

    默认情况下它指向localhost,但由于我在IIS中设置了该站点,我忘了将URL更改为网站域(即代替locahost,它应该说http:// {domain-name} /)

答案 9 :(得分:1)

就我而言,我有一个长度为 70kb 的字符串。编译器没有抛出任何错误。但是 Debugger 未能达到断点。花了 3 个小时抓了我的头发后,我找到了没有达到断点的原因。删除 70kb 数据断点后正常工作。

答案 10 :(得分:1)

我在解决方案中的一个项目被设置为发布模式。我将其更改回 Debug 模式,现在已经达到了断点。

答案 11 :(得分:1)

在Visual Studio 2017中,您需要确保您未处于发布配置模式。

  1. 打开构建菜单ddl
  2. 点击配置管理器
  3. 从“发布”更改为“调试”

configuration manager debug

答案 12 :(得分:1)

如果有人使用Visual Studio 2017和IIS并且正在尝试调试网站项目,则以下内容对我有用:

  1. 将网站项目附加到IIS。
  2. 使用文件 - >将其添加到解决方案中添加 - >现有网站...... 并从inetpub/wwwroot目录中选择项目。
  3. 右键单击解决方案资源管理器中的网站项目,然后选择属性页 - >启动选项
  4. 点击特定页面并选择启动页面(对于服务使用 Service.svc ,对于网站使用 Default.aspx 或所选页面的自定义名称。
  5. 点击使用自定义服务器并撰写
  6.   

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

    例如:http://localhost/MyWebSite

    那就是它!不要忘记确保网站在IIS上运行,并且您要调试的网站被选为启动项目(右键单击 - >设置为启动项目 )。

    原帖:How to Debug Your ASP.NET Projects Running Under IIS

答案 13 :(得分:0)

如果您尚未在VS2017中登录Microsoft帐户,则无法在连接到IIS进程时命中断点。

答案 14 :(得分:0)

就我而言,实际过程与原始启动过程不同。

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

还有一件事情,从发布更改为调试模式。在发布模式下,PDB文件不会使用断点详细信息进行更新。因此,请确保您正在 Debug 模式下调试应用程序。

答案 15 :(得分:0)

右键单击您的项目,然后单击属性,然后选择 Web 标签。 调试器> ASP.NET

答案 16 :(得分:0)

对于我而言,此解决方案非常有用:

解决方案:在“调试/常规”设置中禁用“仅我的代码”选项。

![enter image description here

参考:c-sharpcorner

答案 17 :(得分:0)

这里没有提到我的案子:
由于来自第三方站点的回调,我必须在假域(IIS和/ hosts / etc上的setup)上运行Web项目。

我在VS的进程列表中看到了两个w3wp进程:
w3wp.exe用户名:IIS APPPOOL \默认应用程序池
w3wp.exe用户名:IIS APPPOOL.svc

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

因此我意识到iis中我的Fake域的应用程序池未设置为“默认应用程序池”

enter image description here

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

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

答案 18 :(得分:0)

如果您的任何组件都是强命名的(带符号),则都需要。如果像我一样,添加一个项目并从“强名称”项目/组件中引用它,而忽略对新组件进行签名,则调试将好像新组件是外部组件一样,您将无法进入该组件。因此,请确保所有组件均已签名,或者没有签名。

enter image description here

答案 19 :(得分: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 

VS

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

答案 20 :(得分:0)

也可能(我的同事就是这种情况)您出于任何原因禁用了符号的自动加载。

如果是这样,通过打开 Tools -> Options -> Debugging -> Symbols 并将单选按钮移动到 “加载所有模块,除非被排除”

重新启用它

enter image description here

答案 21 :(得分:0)

在我的一个解决方案中有 20 多个项目的情况下,我在解决方案启动中包含了该项目(我想调试)

右键单击解决方案-->启动项目->多个启动项目->对于要调试的项目,选择“开始”在行动。

现在您应该能够达到这些断点,尤其是可能是辅助类的项目。