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

3 ответов


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

вот как это будет работать: сначала создайте надстройку 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");
}

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

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

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

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


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

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


добавить новый ответ древние вопрос, есть функция в производительность электроинструментов 2013 расширение и производительность электроинструментов 2015 расширение, которые добавляют поле метки времени в окно вывода, код не требуется.