Окно отладки 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, и мне неудобно добавлять метку времени вручную в мои трассировщики.


person Ivan Zlatanov    schedule 06.11.2009    source источник


Ответы (4)


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

Вот как это будет работать: сначала создайте надстройку или макрос Visual Studio, которые подключают PaneUpdated активной панели окна Outlook. (См. этот поток, чтобы узнать, как чтобы сделать это с помощью макроса). Обязательно проверьте в обработчике событий это 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");
}

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

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

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

Еще одна идея: вы всегда можете свернуть собственное окно инструментов, например «Отладка Ivan's Debug Output», которая прослушивает события, поступающие из реального окна вывода, и отображает новые строки (с отметками времени) в вашем собственном окне инструментов. Это, вероятно, самый сложный вариант, но он должен делать именно то, что вы хотите.

person Justin Grant    schedule 09.11.2009
comment
@Justin Я тоже смотрел на эту расширяемость. Конец строки не очень приятный, так как строки имеют разную длину и их очень трудно читать. Перекраска окна - убийца, как вы говорите ... Спасибо за ваш ответ, но я действительно ищу, как это сделать, даже если это хакерское занятие. - person Ivan Zlatanov; 10.11.2009
comment
Да, вместо конца строки, если вы используете решение только для добавления, я бы предложил установить метку времени на новой строке - это удваивает количество строк в окне вывода, но лучше (IMHO), чем отметки времени закопаны в конце строки. Кроме того, может оказаться невозможным даже поместить текст в конец строки, если новые строки уже введены в документ до того, как вы получите управление. - person Justin Grant; 10.11.2009
comment
Еще одна идея: вы всегда можете свернуть собственное окно инструментов, например Отладочный вывод Ивана, который прослушивает события, поступающие из реального окна вывода, и отображает новые строки (с отметками времени) в вашем собственном окне инструментов. Это, вероятно, самый сложный вариант, но он должен делать именно то, что вы хотите. - person Justin Grant; 10.11.2009
comment
@Justin Хорошая идея. Постараюсь посмотреть, что из этого получится. - person Ivan Zlatanov; 10.11.2009
comment
@Justin Небольшая заметка, прежде чем я приму твой ответ. Вы правы, единственный возможный способ справиться с этим - создать другое окно, которое будет отслеживать изменения в панели вывода. Я сделал это и работал, хотя ненавижу решение, это единственное, что я могу сделать на данный момент. Спасибо за предложения и информацию. - person Ivan Zlatanov; 15.11.2009

чтобы добавить новый ответ на вопрос ДРЕВНИЙ, есть функция в расширение для инструментов повышения производительности 2013 года и повышение производительности tools 2015 extension, которые добавляют маржу времени в окно вывода, код не требуется.

person John Gardner    schedule 25.02.2016
comment
Теперь существует более легкое автономное расширение для VS2017. - person user1007074; 30.08.2017
comment
Расширение 2017 года - хорошее дополнение. К сожалению, он не отображает временные метки при компиляции, на что я и надеялся. Компиляция кода UWP у меня болезненна. - person Randall Deetz; 04.04.2019

Искал такой же функционал. Мой коллега придумал макрос $TICK в поле сообщения, распечатывая «текущие» тики ЦП.

Взгляните на эти советы от Саймона Чепмена тоже.

person xtofl    schedule 25.11.2009

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

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

person GrantTheAnt    schedule 21.08.2019