visual-studio-2010 - Visual Studio 2010 调试器 - 尽管条件为 false,但仍会进入 "if"语句

标签 visual-studio-2010 debugging

我正在使用 VS 2010 Professional(在 Windows 7 Professional 64 上),使用 WCF 4.0 编写。
我有以下代码:

        if (responseMessage.StatusCode == HttpStatusCode.NotFound)
        {                
            throw new ContentNotFoundException(contentId, SSPErrorCode.PartnerRestGetStream404);
        }

将调试器附加到进程时,在“if”语句或之前设置断点,当条件为假(responseMessage.StatusCode 为“OK”)时,调试器进入“if”语句。然后它跳过“throw”语句而不做任何事情,然后继续执行代码。

我试过了:

重新启动 VS,注销我的 Windows 用户,重新启动,清理解决方案,再次构建它,重建它,回收应用程序池,重新启动 IIS,在“if”语句和条件中添加更多代码 - 到目前为止没有任何效果。

必须在某个地方有一个缓存,我可以清理它以摆脱它,但是什么,在哪里?

谷歌搜索这个我只找到了 http:--social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/d4b70fd7-b74a-42ce-a538-7185df3d3254/,所以我尝试手动设置断点,但它没有t 在这个类(class)中打破了,尽管在其他类(class)中也打破了。

我很想在不重新安装 VS 的情况下解决这个问题。先感谢您!

更新 :
  • 由于我提出这个问题并且找不到答案,我继续我的项目。
  • 我偶然发现了这个问题,由 John MacIntyre 在 this post 上报告,最后得到一个简化的例子:

  • using System; 
    
    namespace IEnumerableBug2 
    { 
        class Program 
        {
            static void Main(string[] args) 
            {
                if (new object() == null)
                    throw new Exception();
                try { }  catch { }
            }
        }
    }
    


    更新 #2 :

    请注意,我的方法中还有一个 try-catch 语句,位于“if”语句之后的几行。

    我刚刚尝试再次重现此错误,但失败了。我将把关于 stackoverflow 的问题留给可能需要它的其他人,但是,正如我所写的,我不再能够重现这种行为。

    最佳答案

    我也遇到这个问题,但略有不同。
    这是我的代码:

            string lockCode = Guid.NewGuid().ToString();
            bool alreadyLocked = string.IsNullOrWhiteSpace(lockCode);
    
            if (alreadyLocked) {
                throw new Exception("already running");
            }
    
            try {
                PerformTask(task);
            }
            finally {
                UnlockTask(task, lockCode);
            }
    

    如您所见,lockCode 字符串始终分配有一个 Guid 值。调试器进入“if”范围,尽管它不应该。不抛出异常。

    我正在使用 ReSharper 6.0 在 Windows 7 64 位上运行 Visual Studio 2010 SP1。
    Microsoft Visual Studio 2010
    Version 10.0.40219.1 SP1Rel
    Microsoft .NET Framework
    Version 4.0.30319 SP1Rel
    Installed Version: Premium
    

    这发生在我身上,使用框架 4.0 上的 ASP.NET 应用程序。
    我尝试在我机器上的另一个项目上运行此处发布的重现代码,但无法重现该问题。

    此外,我已在此路径上删除了 .NET Framework 的 Shadow Copy 缓存:
    C:\Users\username\AppData\Local\assembly
    

    我删除了 VS2010 符号缓存目录和临时 ASP.NET 文件。
    我重新启动了计算机,清理了整个解决方案并重建了所有内容。
    不知道为什么会发生这种情况。

    解决方法:如果我从方法中删除“try-finally”部分,或者将 throw 语句提取到不同的方法,调试器将正确地跨过“if”范围。

    抱歉没有发布真正的解决方案,我希望这有助于隔离问题或解决它。

    关于visual-studio-2010 - Visual Studio 2010 调试器 - 尽管条件为 false,但仍会进入 "if"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368331/

    相关文章:

    c++ - 调用保存在结构中的对象方法(MSVC2010)

    c# - 从 Caliburn Micro 开始的问题

    java - 在 Eclipse 中调试 org.apache.struts.action.RequestProcessor 等类

    node.js - 使用断点在可视代码中本地调试 Server less (Node js)。

    c# - CodedUI 测试的性能工具

    visual-studio-2010 - Visual Studio C++ 2010 __argv如何成为空指针?

    c# - 将我的 sql 与 Visual Studio 2010 连接

    c# - 如何在 Visual Studio 中调试 finally block ?

    javascript - 调试 Chrome 扩展的 popup.html?

    c# - Console.WriteLine 在大量二进制零之后不显示行