为什么调试器不能在我的ASP.NET应用程序中的断点处停止?

时间:2009-05-13 07:54:19

标签: asp.net debugging

我正在尝试调试大型ASP.NET应用程序。

我在Default.aspx.cs的Page_Load的第一行设置断点。

当我启动应用程序时,我的断点会短暂变成红色圆形轮廓并带有感叹号,然后转回常规断点,然后应用程序启动而不会停止我的断点

MSDN告诉我,此符号表示“尚未加载断点位置”。那么如何才能加载断点位置?几周前它正在运作。什么样的事情可能导致断点“不被加载”?

我可以做些什么让调试器再次停在我的断点处?

附录:

按F5仍然无法调试工作,但我可以启动网站,然后调试/附加进程进入调试模式。如果有人知道为什么这会起作用,但是当我按F5它不起作用(调试按钮甚至不显示在F5上),任何想法都会受到欢迎。

16 个答案:

答案 0 :(得分:45)

尝试在应用程序上进行完全重建。注意它在“调试”配置中。

据我所知(但我不是这些东西的专家),当调试信息文件(.PDB)与真实编译的东西不同步时,就会发生这种情况。

答案 1 :(得分:17)

人......我发现断点的其他解决方案不要停止。 在Visual Studio 2010上的“附加到进程”窗口中并使用Framework 3.5,默认情况下会自动确定要调试的代码类型(v2.0,v1.1,v1.0)和(v4.0)。

Visual Studio变得混乱并且有时会自动将2.0托管代码确定为4.0托管代码。

在这种情况下,您需要单击“附加到”字段上的“选择...”按钮,然后选择管理(v2.0,v1.1,v1.0)。

此致

答案 2 :(得分:6)

IE8的VS调试问题

由于这是我在Weblogs上的第一篇文章,我决定写一篇在ASP.NET官方论坛上经常打开的问题,即VS调试器与IE8崩溃。

我已经回答了4次同样的问题,所以我希望有人会发现这篇文章非常有用,如果他面临同样的问题。

VS调试器如何与IE8崩溃?

如果您打开了IE8的多个实例,并且尝试调试项目,那么您将主要遇到VS调试器停止并忽略断点的问题!

为什么会这样?

IE 8有一个名为Loosely-Coupled Internet Explorer(LCIE)的功能,可以使IE在多个进程中运行。 http://www.microsoft.com/windows/internet-explorer/beta/readiness/developers-existing.aspx#lcie

旧版本的Visual Studio调试器因此而感到困惑,无法弄清楚如何附加到正确的进程。

要解决此问题,您需要按照以下步骤禁用LCIE的流程增长功能:

1)打开RegEdit 2)浏览到HKEY_LOCALMACHINE - >软件 - >微软 - > Internet Explorer - >主要 3)在此键下添加一个名为TabProcGrowth的dword 4)将TabProcGrowth设置为0

如果您在Vista或更新版本上遇到同样的问题,您还需要关闭保护模式。

然后继续开始调试代码:)

答案 3 :(得分:4)

您还可以尝试以下方法:

  1. 关闭解决方案和visual studio。
  2. 运行iisreset / stop
  3. 删除C:\ windows \ microsoft.net \ framework \ v2.0.50727 \ Temporary ASP.NET Files下的所有内容。如果您在删除其中一些文件时遇到问题,可能会有Visual Studio版本或它的调试器仍在运行。
  4. 运行iisreset / start
  5. 在VS中打开解决方案
  6. 将构建设置为Debug
  7. 在解决方案级别运行全部重建
  8. 点击F5

答案 4 :(得分:4)

答案 5 :(得分:3)

您是否在web.config中设置了<compilation debug="true">

答案 6 :(得分:2)

我遇到类似的问题,断点不起作用,同时,在IIS控制台中,我无法编辑项目的配置,即“编辑配置”按钮显示为灰色。

[要查找“编辑配置”按钮:开始|所有课程|管理工具| Internet信息服务,然后展开所需的计算机,展开网站,展开默认网站,找到并右键单击所需的项目,选择属性,然后选择ASP.Net选项卡。]

我发现在IIS中,我的项目的 ASP.Net版本设置为4.0.30319。一旦我将其设置为2.0.50727 ,编辑配置按钮就可用(可点击),我的断点再次起作用。

我也意识到可能值得检查IIS中为“默认网站”设置的ASP.Net版本[在IIS控制台中,展开网站,右键单击默认网站,选择“属性”,然后选择“ASP.Net选项卡”,以便在Visual Studio中创建的任何新项目都可以获取“默认网站”设置。

答案 7 :(得分:1)

我最近遇到了这个问题(WinXP,VS2003),并尝试了上述许多解决方案,但没有成功。然后,我意识到安装了.Net运行时的多个版本。 那么,我提出了IIS 5.1,找到了正确的虚拟文件夹,进入属性然后是ASP.NET选项卡,并将ASP.NET版本从4改为?到1.1,似乎这解决了问题。可能是解决方案就是这个,加上上面的一个或多个。

此外,以上所有内容构成了一个不同的东西尝试的“厨房水槽”。这就像把一堆意大利面条扔在墙上,希望它们中的一些会粘在上面。 而且,其中一些“解决方案”可能会导致您的程序出现其他问题。例如,设置AutoEventWireup =“true”的建议可能会导致您的某些事件发生两次! (见http://support.microsoft.com/kb/814745)。

答案 8 :(得分:1)

始终将解决方案配置设置为&#34; Debug&#34; 以进行调试。 发布后,它可能会更改为发布配置。

答案 9 :(得分:0)

对我来说,项目属性已由另一个开发人员重置为使用IIS Express而不是我的本地IIS。 所以项目运行正常,但没有任何事情被击中。

右键单击项目&gt;属性&gt;网络&gt;服务器 - 更改为本地IIS。 我知道这对每个人都不起作用,但希望这有助于某人。

答案 10 :(得分:0)

  1. 转到您的解决方案属性。
  2. 内部配置属性,将构建配置设置为&#39; Debug&#39;而不是“解决方案中的所有项目”。
  3. 单击“应用”,然后单击“确定”按钮。

答案 11 :(得分:0)

在我的情况下,问题最终与使用完整IIS(而不是Express)和调试版本相关,其中包含完整的调试符号,但也有项目属性,BuildOptimize code检查。

在Express下,这样可以正常工作,但在完整的IIS下,这不起作用。 Visual Studio正确附加到w3wp进程,但它不会为优化的dll加载符号。在Visual Studio中,您可以转到DebugWindowsModules,然后滚动查看特定的dll,并查看Symbol Status列下是否显示Skipped Loading Symbols.。右键单击它并选择Load Symbols使其正常工作。

可能影响此问题的另一个设置是,Visual Studio设置为仅在DebugOptions and SettingsDebuggingGeneral,{{1}下调试用户代码}。优化后,在完整IIS下运行时,dll将被标记为非用户代码,因此当启用“我的代码”时,将跳过其中的任何断点。您可以将VS设置为调试非用户代码,也可以将构建设置为不优化以允许命中断点。

答案 12 :(得分:0)

这使我疯了一个星期,直到我终于注意到一个丢失的设置。 这基于Jay Riggs的回答,但适用于Visual Studios 2010而不是2005。 在项目属性-> Web->调试器中,确保已选中ASP.NET调试器。

答案 13 :(得分:0)

Debug => Options => General =>取消选中“启用我的代码”复选标记

这对我有用

答案 14 :(得分:0)

听起来很愚蠢,但是在流程的早期放置了一个断点:也许流程没有达到断点。

答案 15 :(得分:0)

只是从 C# WPF 中发生在我身上的一些事情中补充一点,但我认为它也适用于这里。我尝试了上述答案,但没有奏效。

代码--->线程--->函数开始-断点-结束

这可能不是你的情况,但我希望这可以帮助某人。从我的代码中,我启动了一个线程,从中启动了一个外部函数。所以尽我所能,我无法让断点从外部函数工作。行为(尽管我重建或更改了选项)正是问题中所解释的。

所以我不得不将断点从外部函数移到线程,然后就行了。停止后,我继续使用 F10-F11

代码 ---> 线程 断点 ---> 函数 START - END