【问题标题】:vs2010 Debug.WriteLine stops workingvs2010 Debug.WriteLine 停止工作
【发布时间】:2012-10-23 00:01:01
【问题描述】:

我遇到了这个问题,这让我在一天中的大部分时间都感到悲伤。
基本上我的 Debug.WriteLine 工作了一会儿,然后神奇地停止输出。调试器仍在工作,因为我可以在行上放一个断点,它会中断,我可以跨过 Debug.WriteLine 并观察它不输出。

现在我已经检查了我能想到的所有内容。我已经尝试过各种帖子中的东西,例如

Debug.Writeline is Not printing anything

Debug.Writeline stops working

Visual Studio 2010 suddenly stops displaying Debug output

但没有任何效果。澄清

  • 我使用的是 vs2010 pro sp1。
  • 项目使用 .net4 框架。
  • 我设置了调试常量。
  • 调试器仍处于附加状态,因为我可以设置断点并命中它们。
  • 两个项目都设置为在“任何 CPU”下构建(我尝试将两者都用作 X86,但没有帮助)
  • 我在 Windows 7 x64 上运行

在遵循所有建议之后,我没有解决办法。以上这些帖子都没有真正得到答复。

那么如何解决这个问题呢?

我想我会创建一个单独的解决方案来重现这个问题。

你可以在这里https://drive.google.com/uc?export=download&confirm=&id=0B0SLafLeQj5GOGxORThMWWhYV28下载我的解决方案来重现错误

所以我制作了 2 个 Windows 应用程序,并将它们设置为同时启动。在每个应用程序中,我启动一个线程,并在线程中执行 Debug.WriteLine

似乎出现某种死锁并停止写入输出。这似乎是 Visual Studio 中的一个错误,对此我感到非常惊讶。我必须相信不可能有 2 个线程同时执行 Debug.WriteLine 的项目吗?

再一次,我非常需要一种方法来解决这个问题并仍然获得调试输出。 哦,我也试过将输出重定向到即时窗口的选项,也没有成功。

【问题讨论】:

    标签: multithreading visual-studio-2010 debugging


    【解决方案1】:

    Visual Studio 中似乎存在错误。我使用 .net 反射器深入研究 CLR,发现它所做的锁定似乎只适用于每个进程级别。因此,当您只运行 1 个项目时,DefaultTraceListener 似乎可以与多线程一起正常工作,但是一旦您运行多个项目,它就会产生某种死锁并停止工作。

    我通过为 Debug.WriteLine 创建一个包装器解决了这个问题,然后我在其中实现了一个全局互斥锁作为围绕写入的锁。 Mutex 是 win32 互斥锁的包装器,因此可以跨系统的进程级别工作。

    在此处查看我的代码,该代码放在我在两个项目中引用并使用的类库中,而不是 System.Diagnostics 下的普通 Debug.WriteLine:

    public class Debug
    {
        #if DEBUG
            private static readonly Mutex DebugMutex =new Mutex(false,@"Global\DebugMutex");
        #endif
    
        [Conditional("DEBUG")]
        public static void WriteLine(string message)
        {
            DebugMutex.WaitOne();
            System.Diagnostics.Debug.WriteLine(message);
            DebugMutex.ReleaseMutex();
        }
    
        [Conditional("DEBUG")]
        public static void WriteLine(string message, string category)
        {
            DebugMutex.WaitOne();
            System.Diagnostics.Debug.WriteLine(message,category);
            DebugMutex.ReleaseMutex();
        }
    
    }
    

    希望这会有所帮助!

    骏马。

    【讨论】:

    • 你是我的英雄!这已经折磨了我好几年了!
    【解决方案2】:

    验证输出窗口的上下文菜单是否选中了“程序输出”。我的调试语句没有跟踪。即使我没有取消选中该选项,这也未选中。检查它为我修复了它。

    【讨论】:

    • 我正在寻找同样的问题,这正是我的输出消息消失的原因 - 谢谢 :)
    • 也为我修复了它。我想我一定是在输出窗口中单击时不小心将其关闭了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2015-01-02
    • 2012-06-14
    相关资源
    最近更新 更多