Visual Studio 2008调试窗口显示时间戳?
-
18-09-2019 - |
题
我希望能够在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. 。问题在于,我不能同时进行视觉工作室调试,并同时聆听Debugview,并且我不愿意手动添加时间邮票。
解决方案
由于输出窗口文本是仅读取的,因此一旦编写,因此没有一种简单的方法可以准确地做您想做的事情。但是,很容易做类似的事情:附加时间戳线 后 新文本写在输出窗口上。这将使输出窗口变得更加混乱,但是您会得到时间。
以下是这样做的方法:首先,创建一个视觉工作室加载项或宏,将 习惯 Outlook Window的活动窗格的事件。 (看 这个线程 对于如何使用宏观方法来执行此操作)。确保在事件处理程序中检查一下 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");
}
也可以为每行预付款,但要困难得多。您无法在输出窗口中更改文本(仅读取),但是您可以清除窗口,并且可以添加文本。因此,您可以使用上面的相同事件处理程序来检测文本更改,但是您可以复制当前文本,将时间戳预定到没有时间戳的任何行,清除窗口,然后重新添加现在 - 带有timestamps文本。当您的输出窗口变大后,此问题是性能。因此,您可能必须实现一种“懒惰冲压”,该“懒惰冲压”在后台进行清晰并插入,以避免杀死您的IDE时(通常)(通常)100秒的调试输出线在短时间内发射。另外,当您清除并重新添加时,如果您当前在输出窗口中选择文本,则选择会丢失。
就个人而言,我只是做简单的事情并附加时间戳线,而不是更难的预申请方法。由于在行末端的东西很难看到而不滚动,因此我可能会确保在时间戳之前有一个新线,因此用户将看到每批或多批输出线,然后再有一个时间戳线。
在显示文本之前,可能有一种方法可以挂起输出窗口,但是在VS扩展性API中我找不到任何可扩展的点。
还有一个想法:您总是可以滚动自己的工具窗口,例如“ Ivan的调试输出”,该窗口会倾听来自真实输出窗口的事件,并将新线路(带有时间戳)呼应到您自己的工具窗口。这可能是最困难的选择,但应该完全做您想要的。
其他提示
为一个新答案添加 古老的 问题,其中有一个功能 生产力电动工具2013扩展 和 生产力电动工具2015扩展 那在输出窗口中添加了时间戳边距,无需代码。
我一直在寻找相同的功能。我的同事提出了 $TICK
消息字段中的宏,打印出“当前” cpu tick。
看一眼 这些提示来自西蒙·查普曼(Simon Chapman), , 也。
我也想要这种功能,因此最终我写了一个扩展名(就像贾斯汀·格兰特在公认的答案中建议的一样)。使用了一段时间后,我决定在调试时相对时间戳对我更有用。如果人们想要绝对的时间戳,我敢肯定我可以添加该功能。无论如何,如果您有兴趣,您可以在 niahtextfilter.com.