Visual Studio 2008 Окно отладки для отображения метки времени?

Я хочу иметь возможность видеть отметку времени в начале каждой трассы в окне отладки в Visual Studio.

 [Time stamp here] The thread 'Win32 Thread' (0xcd0) has exited with code 0 (0x0).

 [Time stamp here] => CLR ProvideAssembly: AppDomainId: 1, Ref: 'msvcm90d...

Примером этого является приложение sysinternals - DebugView. Проблема в том, что у меня не может быть отладки Visual Studio и одновременного прослушивания с DebugView, и мне неудобно добавлять метку времени вручную в мои трассировщики.

5 ответов

Решение

Поскольку текст в окне вывода доступен только для чтения после написания, нет простого способа сделать именно то, что вы хотите. Однако сделать что-то подобное легко: добавьте строку метки времени после записи нового текста в окно вывода. Это сделает окно вывода намного более беспорядочным, но вы получите время.

Вот как это будет работать: во-первых, создайте надстройку Visual Studio или макрос, который перехватывает событие PaneUpdated активной панели окна Outlook. (Смотрите эту ветку, чтобы узнать, как сделать это с помощью подхода Macro). Убедитесь, что в обработчике событий проверьте, что pane.Name == "Debug" и игнорировать другие панели. Во-вторых, когда вы обнаружите новый текст в области вывода отладки, добавьте строку метки времени, например:

public void AddTimestamp(DTE2 dte)
{
    // Retrieve and show the Output window.
    OutputWindow outWin = dte.ToolWindows.OutputWindow;

    pane = outWin.OutputWindowPanes.Item("Debug");
    }
    catch
    {
        pane = outWin.OutputWindowPanes.Add("Debug");
    }

    pane.OutputString("[timestamp: " + DateTime.Now.ToString() + "]\n");
}

Также возможно предварительно установить отметку времени для каждой строки, но это намного сложнее. Вы не можете изменить текст уже в окне вывода (оно доступно только для чтения), но вы можете очистить окно и добавить текст. Таким образом, вы можете использовать тот же подход обработчика событий, описанный выше, чтобы обнаружить изменения текста, но вместо добавления вы можете скопировать текущий текст, добавить метки времени к любым строкам, у которых уже нет меток времени, очистить окно и заново добавить теперь текст с метками времени. Проблема заключается в производительности, когда окно вывода становится большим. Поэтому вам, вероятно, придется реализовать своего рода "ленивую штамповку", которая выполняет очистку и вставку в фоновом режиме, чтобы избежать уничтожения вашей IDE, когда (как это обычно бывает) 100 строк отладочного вывода выдается за короткое время., Кроме того, когда вы очищаете и повторно добавляете, если вы в настоящее время выбираете текст в окне вывода, ваш выбор теряется.

Лично я просто сделал бы простую вещь и добавил бы временные метки, а не более сложный предварительный подход. Поскольку содержимое в конце строки трудно увидеть без прокрутки, я бы, вероятно, удостоверился, что перед меткой времени была новая строка, поэтому пользователь будет видеть каждую серию из одной или нескольких строк вывода, за которой следует одна строка метки времени.

Возможно, есть способ перехватить окно вывода перед отображением текста, но я не смог найти ни одной такой точки расширяемости в API-интерфейсах VS Extensibility.

Еще одна идея: вы всегда можете свернуть свое собственное окно инструментов, например, "Вывод отладки Ивана", который прослушивает события, поступающие из реального окна вывода, и отображает новые строки (с метками времени) в собственном окне инструментов. Это, вероятно, самый сложный вариант, но следует делать именно то, что вы хотите.

Чтобы добавить новый ответ на древний вопрос, в продуктивности Power Tools 2013 Extension и Performa nce Power Tools 2015 Extension есть функция, которая добавляет марку времени в окно вывода, код не требуется.

В Visual Studio 2022 17.4 и выше у вас есть эта опция.

Примечания к выпуску 17.4 2022 г. Что нового

В окнах вывода есть кнопка с часами.



Больше информации:

https://davecallan.com/timestamps-added-output-window-visual-studio/

Я искал ту же функциональность. Мой коллега придумал $TICK макрос в поле сообщения, выводящий "текущие" тики процессора.

Посмотрите и на эти советы от Саймона Чепмена.

Я тоже хотел эту функциональность, поэтому в конце концов я написал расширение для этого (так же, как Джастин Грант предложил в принятом ответе). После некоторого использования я решил, что относительные временные метки даже более полезны для меня при отладке. Если кому-то нужны абсолютные отметки времени, я уверен, что смогу добавить эту функциональность обратно. В любом случае, если вам интересно, вы можете проверить это на https://www.niahtextfilter.com/.

И чтобы показать относительные временные метки в действии в сеансе отладки Visual Studio:

Другие вопросы по тегам