为什么Debug.Writeline停止为解决方案中的某些项目工作?

时间:2011-05-13 12:51:31

标签: visual-studio-2010

在从VS运行代码后,我们有一个包含多个项目的解决方案,通常从Debug.Writeline语句中看到的输出就会停止显示。我提到了多个项目,因为其中一个项目的输出继续出现。但是,另一个项目始终停止显示语句的输出。

它开始让我发疯。我应该提到这也是该项目的第二个开发人员。以前有人见过这个,或者有什么想法吗?

6 个答案:

答案 0 :(得分:4)

按照以下步骤操作,它适用于我

  1. 右键点击您的项目
  2. 选择属性
  3. 选择标签构建
  4. 确保选中定义DEBUG常量
  5. 希望有所帮助

答案 1 :(得分:4)

经过多年的折磨,我终于在Stack Overflow问题中找到了原因和解决方案:vs2010 Debug.WriteLine stops working

似乎Visual Studio的debug.writeline的handinlg无法处理每个正确使用多个线程的多个进程。最终,2个进程将使处理输出的visual studio部分死锁,导致它停止工作。

解决方案是将您对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();
     }
}

或者对于那些使用VB.NET的人:

Imports System.Threading

Public Class Debug
#If DEBUG Then
  Private Shared ReadOnly DebugMutex As New Mutex(False, "Global\DebugMutex")
#End If

<Conditional("DEBUG")> _
Public Shared Sub WriteLine(message As String)
    DebugMutex.WaitOne()
    System.Diagnostics.Debug.WriteLine(message)
    DebugMutex.ReleaseMutex()
End Sub

<Conditional("DEBUG")> _
Public Shared Sub WriteLine(message As String, category As String)
    DebugMutex.WaitOne()
    System.Diagnostics.Debug.WriteLine(message, category)
    DebugMutex.ReleaseMutex()
End Sub
End Class

答案 2 :(得分:1)

您应该从Microsoft SystemInternals尝试DebugView。

http://technet.microsoft.com/en-us/sysinternals/bb896647

此致 阿伦

答案 3 :(得分:1)

尝试检查解决方案的平台是否设置为任何CPU而不是x86(或x64)。我使用x86启用编辑和继续,然后丢失调试输出。返回AnyCPU后,输出也会恢复。

答案 4 :(得分:1)

我在Visual Studio 2010中遇到了同样的问题。上述解决方案都不适用于我的情况,但我解决了这个问题:

  1. 右键单击您的项目。
  2. 选择属性。
  3. 单击“编译”选项卡。
  4. 向下滚动到“高级编译选项”。
  5. 将“生成调试信息”的值从“仅限pdb”更改为 “满”。
  6. 不知道究竟是什么,但现在我的Debug.Print语句再次出现在立即窗口中,我终于可以恢复工作了。

答案 5 :(得分:0)

在VS 2015中得到了解决。突然之间,所有Debug.WriteLine都“停止工作”(未在“输出”窗口中显示)。对此疯狂了大约一个小时后,我发现了问题所在: 1.右键单击“输出”窗口中(“调试”的输出) 2.检查是否已选中“程序输出”