Почему Debug.Writeline перестает работать для некоторых проектов в решении? - PullRequest
3 голосов
/ 13 мая 2011

У нас есть решение с несколькими проектами после запуска кода из VS, вывод, обычно видимый из операторов Debug.Writeline, просто перестает появляться.Я упоминаю несколько проектов, потому что выход из одного из проектов продолжает появляться.Тем не менее, другой проект постоянно перестает показывать вывод из операторов.

Это сводит меня с ума.Я должен упомянуть, что это также происходит для второго разработчика проекта.Кто-нибудь видел это раньше или есть идеи?

Ответы [ 6 ]

4 голосов
/ 17 ноября 2012

После многих лет мучений я, наконец, нашел причину и решение в этом вопросе переполнения стека: vs2010 Debug.WriteLine перестает работать

Кажется, что Visual Studio выполняет отладку.writeline не может обрабатывать несколько процессов, каждый из которых использует несколько потоков правильно.В конечном итоге эти 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
4 голосов
/ 17 октября 2012

Выполните следующие действия, это работает для меня

  1. Щелкните правой кнопкой мыши по вашему проекту
  2. Выберите свойства
  3. Выберите вкладку Build
  4. Убедитесь, что Определить постоянную отладки проверено

Надеюсь, что поможет

1 голос
/ 23 сентября 2017

У меня была такая же проблема с Visual Studio 2010. В моем случае ни одно из вышеперечисленных решений не работало, но я решил это следующим образом:

  1. Щелкните правой кнопкой мыши по вашему проекту.
  2. Выберите Свойства.
  3. Перейдите на вкладку «Компиляция».
  4. Прокрутите вниз до «Дополнительные параметры компиляции».
  5. Измените значение «Создать информацию отладки» с «только для pdb» на "Full".

Понятия не имею, для чего именно, но теперь мои операторы Debug.Print снова появляются в "Немедленном окне", и я наконец могу вернуться к работе.

1 голос
/ 09 июня 2011

Попробуйте проверить, установлена ​​ли для платформы для решения значение Любой ЦП, а не x86 (или x64). Я использовал x86, чтобы включить Edit и Continue, а затем потерял вывод Debug. После возврата в AnyCPU вывод также возвращается.

1 голос
/ 13 мая 2011

вы должны попробовать DebugView от Microsoft SystemInternals.

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

С уважением, Аллен

0 голосов
/ 22 марта 2019

Получил это в VS 2015. Внезапно все Debug.WriteLine "перестает работать" (не отображается в окне вывода).После сумасшествия в течение часа я обнаружил проблему: 1. Щелкните правой кнопкой мыши в окне вывода (вывод из Debug) 2. Проверьте, установлен ли флажок «Вывод программы»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...