Я использую 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
записать вывод входа в окно отладки в том же формате (при желании, или другой формат), как это было бы, если записано в файл.
Обратите внимание, что я видел эти вопросы, но они не предоставляли рабочее решение:
Вы долго задавали мне этот вопрос. Ни за что! Способ.
Проект> Свойства> вкладка Отладка, установите флажок «Включить отладку неуправляемого кода». В более поздних версиях VS переименован в «Включить отладку собственного кода». При включенном механизме отладки неуправляемого кода выходные данные OutputDebugString () теперь правильно перехватываются и направляются в окно вывода.
Вместо этого он может отображаться в «Немедленном окне» из-за настройки:
или что-то в этом роде.