我在使用任何MS提供的调试环境时,都无法调试我的工作站上的任何ASP Classic网站。我正在使用Win XP SP3,并使用内置的IIS 5.1。
几周前它开始出现,在多个项目中发生。显然,我的环境有所改变,因为过去它运行得很好,即使是最近的IDE只要我附加到进程就可以。然后像下面描述的那样失效了。我已经放弃了,但最近开始了一个新项目,尝试进行调试,它起作用了! 不过今天,它又回到了同样的错误行为:
当我尝试设置断点时,IDE实际上会将点设置在我点击的行的上方或下方几行。我试图在完全是服务器端代码的行上设置断点,所以这不是因为它在HTML嵌入式代码块之前或之后跳过。偶尔它不会设置断点,给我一个空心的断点图标,并呈现一个错误,说该行上没有可执行代码。
当我附加到IIS进程(inetinfo.dll,因为我正在低隔离模式下运行)时,断点可能不会被触发。如果它被触发了,并且我开始单步执行,所选行会跳来跳去,并且不会落在源码中的每一行或按预期跟随控制结构。观察到的变量没有按预期更新。它显然看到了不同于我看到的相同行号的代码。
无论我是在浏览器中加载页面,还是
- 从VS2010附加到进程,设置断点并刷新页面,或者
- 设置断点,附加到进程并刷新,或者
- 在我的源代码中添加一个“停止”语句,并刷新页面。在这种情况下,我会得到一个可用调试器列表,每个调试器都会做完全相同的事情--它们跳过相同的代码行,并遵循相同的“错误”路径。我已经尝试过VS2010、2008、2005、2003和Microsoft Script Debugger。
看起来源代码和调试器正在执行的不同步。我确认在VS > 工具 > 选项 > 调试 > 通用 中设置了“要求源文件与原始版本完全匹配”。
当然,这些都是ASP Classic站点--没有编译的代码,所以我在IDE中看到的源代码应该与调试器执行的代码相同。目前,这不是特定于一个项目--它正在发生在至少两个完全不同的项目上。并且,在多台机器上都发生--我将我的项目部署到测试服务器上并尝试在那里调试,但得到了相同的行为。
我在这里找到了一些类似问题的信息,涉及UTF编码文件包含非ANSI字符(您知道,您使用Unicode支持的那些字符!) here ,here和here,但我查看了我的源代码,没有发现任何这样的文件。
有什么想法吗?谢谢!