我正在尝试调试大型ASP.NET应用程序。
我在Default.aspx.cs的Page_Load的第一行设置断点。
当我启动应用程序时,我的断点会短暂变成红色圆形轮廓并带有感叹号,然后转回常规断点,然后应用程序启动而不会停止我的断点。
MSDN告诉我,此符号表示“尚未加载断点位置”。那么如何才能加载断点位置?几周前它正在运作。什么样的事情可能导致断点“不被加载”?
我可以做些什么让调试器再次停在我的断点处?
按F5仍然无法调试工作,但我可以启动网站,然后调试/附加进程进入调试模式。如果有人知道为什么这会起作用,但是当我按F5它不起作用(调试按钮甚至不显示在F5上),任何想法都会受到欢迎。
答案 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)
您还可以尝试以下方法:
答案 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)
答案 11 :(得分:0)
在我的情况下,问题最终与使用完整IIS(而不是Express)和调试版本相关,其中包含完整的调试符号,但也有项目属性,Build
,Optimize code
检查。
在Express下,这样可以正常工作,但在完整的IIS下,这不起作用。 Visual Studio正确附加到w3wp进程,但它不会为优化的dll加载符号。在Visual Studio中,您可以转到Debug
,Windows
,Modules
,然后滚动查看特定的dll,并查看Symbol Status
列下是否显示Skipped Loading Symbols.
。右键单击它并选择Load Symbols
使其正常工作。
可能影响此问题的另一个设置是,Visual Studio设置为仅在Debug
,Options and Settings
,Debugging
,General
,{{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