在从VS运行代码后,我们有一个包含多个项目的解决方案,通常从Debug.Writeline语句中看到的输出就会停止显示。我提到了多个项目,因为其中一个项目的输出继续出现。但是,另一个项目始终停止显示语句的输出。
它开始让我发疯。我应该提到这也是该项目的第二个开发人员。以前有人见过这个,或者有什么想法吗?
答案 0 :(得分:4)
按照以下步骤操作,它适用于我
希望有所帮助
答案 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中遇到了同样的问题。上述解决方案都不适用于我的情况,但我解决了这个问题:
不知道究竟是什么,但现在我的Debug.Print
语句再次出现在立即窗口中,我终于可以恢复工作了。
答案 5 :(得分:0)
在VS 2015中得到了解决。突然之间,所有Debug.WriteLine都“停止工作”(未在“输出”窗口中显示)。对此疯狂了大约一个小时后,我发现了问题所在: 1.右键单击“输出”窗口中(“调试”的输出) 2.检查是否已选中“程序输出”