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

Visual studio 2010 为什么Debug.Writeline在解决方案中的某些项目上停止工作?,visual-studio-2010,Visual Studio 2010,我们有一个多项目的解决方案,在运行代码后,通常从调试中看到输出。Writeline语句只是停止出现。我之所以提到多个项目,是因为其中一个项目的输出会继续出现。但是,另一个项目始终停止显示语句的输出 这开始让我发疯了。我应该提到的是,这个项目的第二个开发人员也遇到了这种情况。以前有人见过这个,或者有什么想法吗?您应该尝试从Microsoft SystemInternals调试视图 问候,, Allen尝试检查解决方案的平台是否设置为任何CPU,而不是x86或x64。我使用x86启用“编辑并继续”,

我们有一个多项目的解决方案,在运行代码后,通常从调试中看到输出。Writeline语句只是停止出现。我之所以提到多个项目,是因为其中一个项目的输出会继续出现。但是,另一个项目始终停止显示语句的输出


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

您应该尝试从Microsoft SystemInternals调试视图

问候,,
Allen

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

按照这些步骤操作,它对我有效

右键单击您的项目 选择属性 选择选项卡构建 确保选中“定义调试常量”
希望能有所帮助

多年来,我一直受此困扰,终于在堆栈溢出问题中找到了原因和解决方案:

Visual Studio对debug.writeline的处理似乎无法处理每个进程都正确使用多个线程的多个进程。最终,这两个进程将使VisualStudio中处理输出的部分死锁,导致其停止工作

解决方案是将对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

我对VisualStudio2010也有同样的问题。上述解决方案在我的案例中都不起作用,但我是这样解决的:

右键单击您的项目。 选择属性。 单击编译选项卡。 向下滚动到高级编译选项。 将仅从pdb生成调试信息的值更改为 满的
不知道它的确切用途,但现在我的Debug.Print语句再次出现在即时窗口中,我终于可以回去工作了。

在VS 2015中得到了这个。所有Debug.WriteLine突然停止工作,而不显示在输出窗口中。在为此疯狂了大约一个小时后,我发现了问题: 1.在“输出”窗口中单击鼠标右键“从调试输出”
2.检查程序输出是否被选中

。而且似乎很有用。但这并不能真正解决这个问题。让我们假设我不能安装任何东西,而宁愿让VisualStudio按预期工作。好的。当您将活动解决方案配置设置为Debug时,请尝试检查您的解决方案配置管理器,并查看是否所有项目都处于调试配置中。您好,有您这边的更新吗?这确实很奇怪。我最终使用设置将所有调试输出发送到即时窗口。。。奇怪的是,这似乎起了作用。这不是我想要的,但至少我有输出。这肯定是我的问题,因为我的设置和其他有问题的程序员都将我们的设置为x86。从长远来看,我真的无法做出这样的改变。。。但我会尝试一下,至少测试一下。我也遇到了同样的问题,改变平台确实解决了问题。谢谢你的回复。该选项已在所有项目中选择。此外,万一有人发现自己在这里。。。在VS2010中,它位于“编译”选项卡中,如果vb.net位于高级编译对话框中,则与@Cor的答案结合使用,有助于将Debug.WriteLine语句打印到输出窗口。哇,虽然屏幕导航可能与VS 2010相关,但即使我们使用VS 2015,这个问题也会相关。在VS 2015中,高级选项位于项目属性的“生成”选项卡内。结合@onmyway133的回答,使用Debug.WriteLine语句将消息打印到输出窗口对我很有效。