【问题标题】:Debugger on wrong line when debugging Classic Asp调试 Classic Asp 时调试器在错误的行上
【发布时间】:2016-08-22 16:30:43
【问题描述】:

我在使用任何可用的 MS 调试环境在我的工作站上调试任何 ASP Classic 网站时遇到问题。我在 Win XP SP3 上,使用内置的 IIS 5.1。

它始于几周前,并发生在多个项目中。我的环境明显发生了变化,因为它在过去运行良好,即使在最近的 IDE 中,只要我附加到进程。然后它如下所述破裂。我已经放弃了,但我最近开始研究一个新项目,尝试调试并且成功了!但今天,它又回到了同样的错误行为:

当我尝试设置断点时,IDE 实际上将点设置在我单击的行上方或下方几行处。我试图在完全是服务器端代码的行上设置断点,所以这不是因为它在带有嵌入式代码块的 HTML 之前或之后跳过。有时它不会设置断点,给我一个空心的断点图标并显示一个错误,说行中没有可执行代码。

当我附加到 IIS 进程(inetinfo.dll,因为我在低隔离模式下运行)时,断点可能不会被命中。如果是这样,并且我开始单步执行,则所选线会跳来跳去,并且不会落在源中的每条连续线上,也不会按预期遵循控制结构。监视变量未按预期更新。很明显,它看到的代码与我为相同的行号看到的代码不同。

无论我在浏览器中加载页面和

,都会发生相同的行为
  • 从 VS2010 附加到进程,设置断点并刷新页面,或者
  • 设置断点,附加到进程,然后刷新,或者
  • 在我的源代码中添加一个“停止”语句,然后刷新页面。在这种情况下,我会看到一个可用调试器的列表,它们中的每一个都做完全相同的事情——它们跳过相同的代码行并遵循相同的“不正确”路径。我尝试过 VS2010、2008、2005、2003 和 Microsoft Script Debugger。

源代码似乎与调试器正在单步执行的内容不同步。我已经确定在 VS > Tools >Options > Debugging > General 中设置了“要求源文件与原始版本完全匹配”

当然,这些都是 ASP Classic 站点——没有编译代码,所以我在 IDE 中看到的源代码应该与调试器正在执行的代码相同。它并不特定于一个项目——它目前至少发生在两个完全独立的项目上。而且,它发生在多台机器上——我将我的项目部署到一个测试服务器并尝试在那里调试,并得到了相同的行为。

我发现了一些与包含非 ANSI 字符的 UTF 编码文件相关的类似问题的信息(您知道,您使用 Unicode 支持的文件!)hereherehere,但我通过我的来源,找不到任何类似的文件。

有什么想法吗?谢谢!

【问题讨论】:

    标签: visual-studio debugging asp-classic vbscript


    【解决方案1】:

    我见过这种情况的唯一一次是项目被设置为在发布模式而不是调试模式下构建。

    检查的难易程度取决于您的 IDE 设置,它可能已经在您的工具栏中,但如果不是。

    1. 右键单击解决方案
    2. 选择配置管理器...
    3. 确保在“活动解决方案配置”下拉菜单中选择了调试

    【讨论】:

    • 不,已经检查过了——我目前正在处理的项目中只有一个调试配置。而且,再一次,没有“编译”步骤来调用配置——它只是保存 .ASP 文件,然后刷新浏览器。谢谢!
    • 其他人的机器上会出现这个问题吗?如果是这样,请检查项目的构建设置以确保它生成正确的调试信息。我想你已经尝试过重建?如果这些都不起作用,那么我可能只会把手举到空中,尖叫,然后重新安装 VS。
    • 没有什么可构建的,但我还是进行了重建,但没有任何效果。我会看看我是否可以在另一台机器上重现,虽然 - 好主意!我不认为这只是 VS——它发生在所有版本的 VS 以及 MS Script Debugger 中,因此正在调用一些通用组件...
    【解决方案2】:

    在我的情况下,源代码文件中的 lineends 错误。 VS 期望 \x0D\x0A 但我只有 \x0D。 在 Options -> Environment -> Document -> something with line end 下有一个设置(我不使用英文的 vs 所以我只能猜测)。检查此选项解决了问题 4 我。

    【讨论】:

      【解决方案3】:

      在评论之前,我的文件中有一个额外的 ;。不知道这是如何导致问题的,但删除它似乎可以解决问题。

      【讨论】:

      • 今年最被低估的答案人们 +1。有一个超过 80,000 行的 .c 文件,当放置断点时,程序会中断数千行。它会正确地遍历逻辑,但永远不会显示正确的位置。找到这些金块;// 自行站立并将其移除即可解决。
      【解决方案4】:

      我在 VS2008 中遇到了同样的问题。将 asp 文件转换为 ANSI 编码(使用 Notepad++)解决了它。

      【讨论】:

        【解决方案5】:

        编码肯定有问题。该文件是ANSI的,我转换为其他格式,然后改回ANSI并解决了这个问题。请小心,因为您可能会丢失更改编码的特殊字符。

        【讨论】:

        • 我想补充一点,还需要通过<!--#include file = "......"-->指令检查脚本包含的所有文件的编码。
        【解决方案6】:

        这仍然在 VS2010 中发生。

        我发现绕过它的方法是选择 Release vs Debug。重建项目。切换回调试和繁荣。

        你们都再次同步了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-29
          • 2011-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多