Может произвести от OutputDebugString быть просмотренным в окне вывода Visual Studio?

Я использую C# и Visual Studio 2010.

Когда я использую OutputDebugString для записи отладочной информации это должно обнаружиться в окне вывода?

Я вижу вывод от OutputDebugString в DebugView, но я думал, что буду видеть его в Окне вывода Visual Studio. Я посмотрел в соответствии с меню Tools? Опции? Отладка? Общий, и вывод не перенаправляется к окну Immediate. Я также посмотрел в соответствии с меню Tools*? Опции? Отладка? Окно вывода и все Общие Выходные Настройки установлены на "На". Наконец, я использовал выпадающий список в Окне вывода, чтобы указать, что Сообщения отладки должны появиться.

Если я изменяю меню Tools*? Опции? Отладка? Общий для перенаправления вывода к окну Immediate, OutputDebugString сообщения не появляются в непосредственном окне.

Вот моя вся тестовая программа:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace OutputDebugString
{
  class Program
  {
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main(string[] args)
    {
      Console.WriteLine("Main - Enter - Console.WriteLine");
      Debug.WriteLine("Main - Enter - Debug.WriteLine");
      OutputDebugString("Main - Enter - OutputDebugString");
      OutputDebugString("Main - Exit - OutputDebugString");
      Debug.WriteLine("Main - Exit - Debug.WriteLine");
      Console.WriteLine("Main - Exit - Console.WriteLine");
    }
  }
}

Если я работаю в отладчике, Debug.WriteLine вывод действительно обнаруживается в окне вывода, но OutputDebugString вывод не делает.

Если я работаю из консоли, обоих Debug.WriteLine и OutputDebugString обнаружьтесь в DebugView.

Почему не делает OutputDebugString вывод когда-нибудь обнаруживается в окне вывода?

В конечном счете мое намерение не состоит в том, чтобы записать большой вывод отладки с OutputDebugString, скорее я буду использовать Систему. Диагностика или NLog или что-то подобное. Я просто пытаюсь узнать, если я настраиваю регистрирующуюся платформу для записи в OutputDebugString, будет вывод быть видимым из отладчика.

Я вернулся к своей исходной программе (не простой тест выше), который использует TraceSources и TraceListeners настроенный через app.config файл. Если я настраиваю источники трассировки для записи в System.Diagnostics.DefaultTraceListener (который документируется как пишущий в OutputDebugString), затем исходный вывод трассировки ДЕЙСТВИТЕЛЬНО переходит к окну отладки. Однако строки та запись непосредственно с OutputDebugString (такой как в моем простом примере), НЕ переходят к окну отладки. Кроме того, если я использую другое TraceListener это пишет в OutputDebugString (Я добрался один от Ukadc. Диагностика в Codeplex), которые производят, НЕ переходит к окну отладки.

Одно примечание о Ukadc. Приемник трассировки диагностики... Ukadc. Диагностика содержит некоторые приемники трассировки, которые допускают пользовательское форматирование вывода (подобный форматированию, которое доступно в log4net, NLog и LAB). Так, "только" с зависимостью от Ukadc. Диагностика можно использовать "стандартный" вход диагностики.NET, но я могу получить некоторые расширенные функции (как выходное форматирование), не становясь зависящим от возможно намного более крупной платформы. В этом случае я мог использовать Ukadc. Диагностика OutputDebugStringTraceListener записать вывод входа в окно отладки в том же формате (при желании, или другой формат), как это было бы, если записано в файл.

Обратите внимание, что я видел эти вопросы, но они не предоставляли рабочее решение:

Здесь и здесь

20
задан Community 23 May 2017 в 10:31
поделиться

2 ответа

Вы долго задавали мне этот вопрос. Ни за что! Способ.

Проект> Свойства> вкладка Отладка, установите флажок «Включить отладку неуправляемого кода». В более поздних версиях VS переименован в «Включить отладку собственного кода». При включенном механизме отладки неуправляемого кода выходные данные OutputDebugString () теперь правильно перехватываются и направляются в окно вывода.

36
ответ дан 29 November 2019 в 23:23
поделиться

Вместо этого он может отображаться в «Немедленном окне» из-за настройки:

  • Перейдите в Инструменты / Параметры / Отладка / Общие. Снимите флажок «Перенаправить весь текст окна вывода в окно немедленного выполнения»

или что-то в этом роде.

3
ответ дан 29 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: