Можно ли просмотреть выходные данные из OutputDebugString в окне вывода Visual Studio?
Я использую C# и Visual Studio 2010.
Когда я использую OutputDebugString
написать отладочную информацию, она должна отображаться в окне вывода?
Я могу видеть вывод из OutputDebugString
в DebugView, но я думал, что увижу его в окне вывода Visual Studio. Я посмотрел в меню Инструменты? Варианты? Отладка? Общие, и вывод НЕ перенаправляется в окно "Немедленно". Я также посмотрел в меню Инструменты *? Варианты? Отладка? Окно вывода и все общие настройки вывода установлены на "Вкл.". Наконец, я использовал раскрывающийся список в окне "Вывод", чтобы указать, что сообщения отладки должны появляться.
Если я поменяю меню Инструменты *? Варианты? Отладка? Общие, чтобы перенаправить вывод в окно "Немедленное", 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
Вернее буду использовать System.Diagnostics или NLog или что-то подобное. Я просто пытаюсь выяснить, настраиваю ли я платформу регистрации для записи в OutputDebugString
, будет ли вывод видим изнутри отладчика.
Я вернулся к своей исходной программе (не простой тест выше), которая использует TraceSources
а также TraceListeners
настроен через app.config
файл. Если я настрою источники трассировки для записи в System.Diagnostics.DefaultTraceListener
(который задокументирован как OutputDebugString
), затем вывод источника трассировки ДОХОДИТ в окно отладки. Тем не менее, строки, которые пишут непосредственно с OutputDebugString
(например, в моем простом примере) НЕ переходите в окно отладки. Кроме того, если я использую другой TraceListener
что пишет OutputDebugString
(Я получил один из Ukadc.Diagnostics в Codeplex), этот вывод не идет в окно отладки.
Одно замечание о слушателе трассировки Ukadc.Diagnostics... Ukadc.Diagnostics содержит некоторые прослушиватели трассировки, которые позволяют настраивать форматирование вывода (аналогично форматированию, доступному в log4net, NLog и LAB). Таким образом, с "только" зависимостью от Ukadc.Diagnostics можно использовать "стандартное" ведение журнала диагностики.NET, но я могу получить некоторые расширенные функции (например, форматирование вывода), не становясь зависимым от, возможно, гораздо более крупной платформы. В этом случае я мог бы использовать Ukadc.Diagnostics OutputDebugStringTraceListener
записать вывод журнала в окно отладки в том же формате (при желании или в другом формате), как если бы он был записан в файл.
Обратите внимание, что я видел эти вопросы, но они не дали рабочего решения:
5 ответов
Вы заставили меня ответить на этот вопрос некоторое время. Ни за что! Путь.
На вкладке "Проект"> "Свойства"> "Отладка" установите флажок "Включить отладку неуправляемого кода". Переименован в "Включить отладку собственного кода" в более поздних версиях VS. С включенным механизмом отладки неуправляемого кода вывод OutputDebugString() теперь правильно перехватывается и направляется в окно вывода.
При отладке (Debug => Start Debugging F5) настройка Project + Properties, вкладка Debug, проверка "Включить отладку неуправляемого кода" работает хорошо.
Когда НЕ выполняется отладка (Debug => Start Without Debugging CTRL+F5), вы должны использовать DebugView из библиотеки SysInternals. Скачать DebugView для Windows v4.76
Вместо этого он может отображаться в "Немедленном окне" из-за настройки:
- Перейдите в Инструменты / Параметры / Отладка / Общие. Снимите флажок "Перенаправить весь текст окна вывода в окно немедленного действия"
Или что-нибудь подобное.
У меня был "Проект"> "Свойства"> вкладка "Отладка"> "Включить отладку неуправляемого кода", но OutputDebugString()
не работало, хотя точки останова работали.
У меня также было Решение> Общие свойства> Зависимости проекта> отмечена моя DLL в моем проекте C#, но зависимости сборки не работали.
Исправление обеих этих проблем заключалось в следующем: Решение> Свойства конфигурации> отметьте сборку в моей DLL.
У меня была эта проблема один раз, и все решения, предложенные в этой теме, не увенчались успехом. DebugView мог видеть отладочные сообщения, а Visual Studio 2017 — нет, как бы я ни пытался его настроить. Включить отладку собственного кода? Проверять. Нет переадресации на "немедленно"? Проверять. Проект не исключается из компиляции? Проверять.
В конце концов я решил проблему с помощью установщика Visual Studio, используя опцию «Восстановить» в моей установке. На выполнение ушло около 10 минут.