【问题标题】:Why would the debugger not be stopping at a breakpoint in my ASP.NET application?为什么调试器不会在我的 ASP.NET 应用程序的断点处停止?
【发布时间】:2023-03-15 14:47:01
【问题描述】:

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

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

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

MSDN 告诉我这个符号表示“断点位置尚未加载”。那么如何获取要加载的断点位置呢?几周前它还在工作。什么样的事情会导致断点“未加载”?

我该怎么做才能让调试器再次停在我的断点处?

附录:

我仍然无法通过按 F5 来进行调试,但我可以启动网站,然后执行 debug/attach-process 以进入调试模式。如果有人知道为什么这会起作用,但是当我按 F5 时它不起作用(调试按钮甚至不会出现在 F5 上),任何想法都会受到欢迎。

【问题讨论】:

  • 在我的例子中,同一个 ASP.NET 应用程序在多个域上运行,并使用请求中的域来选择要服务的内容。它设置为在本地 IIS 上运行,并通过 hosts 文件将域解析为 127.0.0.1。该应用程序运行正常,但调试器没有在断点处停止,直到我将项目属性 > Web > 服务器 > 项目 URL 设置为用于发出请求的域。 (它包含该应用程序可用的另一个域。)

标签: asp.net debugging


【解决方案1】:

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

据我了解(但我不是这些方面的专家),当调试信息文件 (.PDB) 与实际编译的内容不同步时,可能会发生这种情况。

【讨论】:

  • 我删除了 ../debug/bin 中的所有 .pdb 文件,但这并没有帮助。
  • 删除不是问题。您必须重新创建它们。您是否尝试在 Visual Studio 中“重建解决方案”?
  • 傻瓜,我有发布的构建选项,而不是调试!
  • 噢!我有系统在发布而不是调试版本。感谢您提醒您先检查明显的事情!
  • 重建对我有用,但有时我必须先进行清理,然后再进行重建。
【解决方案2】:

人们....我找到了断点的其他解决方案不要停止。 在 Visual Studio 2010 的 Attach to Process 窗口中并使用 Framework 3.5,默认情况下会自动确定要调试的代码类型(v2.0、v1.1、v1.0)和(v4.0)。

Visual Studio 有时会感到困惑并自动将 2.0 托管代码确定为 4.0 托管代码。

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

问候

【讨论】:

  • 嗯,你知道的。这实际上对我有用。 =)谢谢男人! (+1)
  • @Augusto Mazzoni Pierzynski 只有 CS 文件中的代码被命中,而不是 Java 脚本代码。在选择代码类型窗口中,我尝试检查托管(4.0)和脚本,但是 Visual Studio 不允许。它说“SCript 调试与 Managed(v4.0) 不兼容。你想取消选中 Managed(v4.0) 吗?”有什么解决方法的想法吗?
  • 非常感谢!这对我来说是个问题。我猜由于项目配置错误,调试器无法正确确定正确的代码类型,直到我手动选择 .NET 版本和附加的“托管兼容模式”。
【解决方案3】:

IE8 的 VS 调试问题

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

我已经回答了 4 次相同的问题,所以如果有人遇到同样的问题,我希望这篇文章对他很有帮助。

VS 调试器怎么会在 IE8 上崩溃?

如果您打开了多个 IE8 实例并尝试调试您的项目,您通常会遇到 VS 调试器停止并忽略您的断点的问题!

为什么会这样?

IE 8 有一个称为松耦合 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 -> SOFTWARE -> Microsoft -> Internet Explorer -> Main 3) 在此键下添加一个名为 TabProcGrowth 的 dword 4) 将 TabProcGrowth 设置为 0

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

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

【讨论】:

    【解决方案4】:

    您也可以尝试以下方法:

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

    【讨论】:

    • 我在这个列表上做了所有的事情(尽管我没有在本地运行 IIS,而是在 localhost/port 网络服务器),但我仍然遇到了问题。我删除了所有 .pdb 文件,没有任何变化。所有项目的构建配置都是“调试”。
    • 也许尝试在 IIS 下运行它。
    • 这对我有用,虽然文件夹是 v4.0 而不是 V2.0
    【解决方案5】:

    如果您使用的是 Visual Studio 2005 和 IE8,我可能会有一个解释:IE8 引入了一个称为松散耦合 IE (LCIE) 的新功能,它在调试 VS2005 ASP.NET 应用程序时会导致已知问题。有关更多详细信息和一些解决方案,请参阅此thread on SO

    当我在我的 ASP.NET 项目中开始调试运行之前关闭所有正在运行的 IE8 实例时,我发现所有调试问题都消失了。

    我在这里发帖的另一个原因是share a blog I found,它列出了“断点不起作用”问题的大量潜在解决方案。这很好,因为博客在一个地方列出了我在互联网上发现的大多数解决方案。无论如何,该博客的作者是 George P. Alexander;我会在这里复制并粘贴多汁的部分,以防文章出现问题:

    1. 使用精确制导导弹:删除 obj 中的 .pdb 文件并 bin 文件夹。重新编译。运行。

    2. 地毯炸弹所有 .dll:删除并重新加载所有引用的 .dll(如 你的课堂项目)

    3. 释放 WMD:如果 #1 和 #2 不起作用,请删除非常 obj 和 bin 文件夹本身,这样 所有 .pdbs 和 .dlls 都被消灭了。 重新加载所需的 .dll 并提供 一枪。

    4. VS.Net 魔法:关闭 VS.Net 并重新启动。重建。跑步。是的,它 有时确实有效。

    5. Windows 魔法:关闭计算机并重新启动。重建。跑步。

    6. 执行模式:确保 VS.Net 执行模式设置为 “调试”而不是“发布”

    7. Web.config 设置:确保 XML 元素中的“编译”标记 你的 web.config 文件有一个属性 使用调试 =“真”。只有当这是 启用将 Web 应用程序和服务 生成他们的 .pdb 文件 .dll

    8. 项目属性 #1:确保项目属性 --> 调试 --> 启用“ASP.Net 调试为真”或 “启用 Visual Studio 托管 进程”(取决于版本 VS.Net)。

    9. 项目属性 #2:确保项目属性 --> 配置属性 --> 构建 --> “生成调试信息”是 设置为“真”。

    10. 附加了错误的进程:您的调试会话可能未附加 到正确的过程。你可能不得不 步入手动附加 过程。这可以通过网络实现 服务。附加选项 进程在调试菜单中。

    11. 脚本和非托管代码调试:无法调试脚本或 非托管代码?确保项目 属性 --> 调试 --> "启用 ASP 调试”或“启用非托管 调试”(取决于您的版本 VS.Net) 设置为 true。

    12. @Page 指令 #1:确保您的 AutoEventWireup 属性 .aspx 文档的 @Page 指令集 为“真”。

    13. @Page 指令 #2:确保 .aspx 中的 Debug 属性 文档的 @Page 指令设置为 “真的”。如果您没有找到 属性,没关系。默认情况下是 是的。

    14. 流氓 .DLL:确保您没有其他 .dll 实例 运行在其他地方从哪里来 您预期的项目路径。

    14.1 Rogue .dlls sleeper cell #1:您是否将项目 .dll 安装在 GAC 文件夹?你可能正在运行 .dll 托管在您的 GAC 文件夹中 您的 bin 文件夹中的那个。 从 GAC 中删除/卸载 .dll 然后再试一次。

    14.2 Rogue .DLLs sleeper cell #2:

    C:\文档和 设置[用户名]\VSWebCache[机器 名称]:

    在文件夹上释放 WMD (#3) 与您的项目有关。

    14.3 Rogue DLLs sleeper cell #3:你项目中的 .dlls 在其他地方 但在哪里被引用 你的项目。你可以找到这些 通过检查项目属性。在 简而言之,VS.Net 指的是其他一些 .dll 而不是你加载的那个 开发环境。

    14.4 Rogue .DLLs sleeper cell #4:希望你不必玩 完成时此文件夹 以上几点...

    介绍 C:\WINDOWS\Microsoft.NET\Framework[.Net 版本]\临时 ASP.NET 文件\

    此文件夹可能包含较旧的 .dll 版本存储在您的 可能会得到的 Windows 文件夹 从 VS.Net 运行时引用。 如果发生这种情况,那就糟了。你可以 删除尽可能多的文件夹和内容 您可以与您的项目相关。 可能存在只读锁 您需要通过关闭来禁用 过程。这更像是最后一次 放弃努力。如果你有,不要这样做 从来没有玩过你的 Windows 文件夹。在大多数情况下,事情已经完成 在此之前通常会在上面 修理它。所以理想情况下,你不必 在你读到这一点的时候 用上面的指针完成。而只是 为了记录,我不推荐 任何人都可以探索这个选项或玩 如果你在你的 Windows 文件夹周围 没有物理学博士学位, 数学、Windows 和 .Net。

    其他提示:

    1. 模块窗口:可以在您的应用程序中查看模块窗口 从 VS.Net 运行(调试 --> Windows --> 模块)。所有模块来自 你的项目应该列在那里。 如果您的项目的 .dll 已列出并且 符号的状态是“符号 已加载”,您没有问题。

    如果是与您的 .pdb 相关的消息 文件,转到“选择符号”和 适当的 .pdb 文件。你可能有 重新启动调试或加载 VS.Net 再次。状态现在应该改变 到“已加载符号”。
    2. VS.Net 选项:工具 --> 选项 --> 调试 在 VS.Net 2005 以后,多了一个节点叫做 可以向 VS.Net 询问的“符号” 寻找符号。这个可以访问 调试时通过模块窗口 也是。

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • 是的,在我的 web.config 我有:
      【解决方案7】:

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

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

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

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

      【讨论】:

        【解决方案8】:

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

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

        【讨论】:

          【解决方案9】:

          始终将解决方案配置设置为“调试”以进行调试。 发布后可能会更改为 Release 配置。

          【讨论】:

            【解决方案10】:

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

            右键单击项目 > 属性 > Web > 服务器 - 更改为本地 IIS。 我知道这并不适合所有人,但希望这对某人有所帮助。

            【讨论】:

              【解决方案11】:
              1. 转到您的解决方案属性。
              2. 在配置属性中,将解决方案中所有项目的构建配置设置为“调试”而不是“发布”。
              3. 单击应用,然后单击确定按钮。

              【讨论】:

                【解决方案12】:

                在我的情况下,问题最终与使用完整的 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 SettingsDebuggingGeneralEnable Just My Code 下的用户代码,则可能会影响这一点。优化后,在完整 IIS 下运行时,dll 将被标记为非用户代码,因此启用 Just My Code 时,将跳过其中的任何断点。您可以将 VS 设置为调试非用户代码,也可以将构建设置为不优化以允许命中断点。

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                    【解决方案14】:

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

                    【讨论】:

                      【解决方案15】:

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

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

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

                      所以我不得不将断点从外部函数移动到线程,这才奏效。停止时,我继续 F10-F11

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

                      【讨论】:

                        【解决方案16】:

                        Debug=>Options=>General => 去掉“Enable Just My Code”的复选标记

                        这对我有用

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2014-04-12
                          • 1970-01-01
                          • 2016-11-19
                          • 2023-03-12
                          • 2015-04-19
                          • 2021-07-21
                          • 1970-01-01
                          • 2015-06-30
                          相关资源
                          最近更新 更多