Visual Studio 2008 调试窗口显示时间戳?

问题描述 投票:0回答:5

我希望能够在 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 进行监听,并且我不习惯将时间戳手动添加到跟踪器中。

visual-studio visual-studio-2008 debugging timestamp output-window
5个回答
7
投票

由于输出窗口文本一旦写入就是只读的,因此没有一种简单的方法可以准确地执行您想要执行的操作。然而,做类似的事情很容易:在新文本写入输出窗口之后添加时间戳行。这将使输出窗口变得更加混乱,但你会得到你的计时。 其工作原理如下:首先,创建一个 Visual Studio 插件或宏,用于挂钩 Outlook 窗口活动窗格的

PaneUpdated

事件。 (有关如何使用宏方法执行此操作,请参阅此线程)。确保在事件处理程序中检查 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"); }

也可以在每行前面添加一个时间戳,但这要困难得多。您无法更改“输出”窗口中已有的文本(它是只读的),但您可以清除该窗口并添加文本。因此,您可以使用上面相同的事件处理程序方法来检测文本更改,但您可以复制当前文本,将时间戳添加到任何还没有时间戳的行,清除窗口,然后重新添加 now,而不是附加- 带时间戳的文本。一旦输出窗口变大,就会出现性能问题。因此,您可能必须实现一种“惰性标记”,在后台进行清除和插入,以避免在短时间内发出 100 行调试输出(这是常见的)时杀死您的 IDE 。此外,当您清除并重新添加时,如果您当前正在输出窗口中选择文本,则您的选择将会丢失。 

就我个人而言,我只会做简单的事情并附加时间戳行,而不是更困难的预挂起方法。由于如果不滚动就很难看到行末尾的内容,我可能会确保时间戳之前有一个换行符,因此用户会看到每批一个或多个输出行,后跟一个时间戳行。

可能有一种方法可以在显示文本之前挂钩输出窗口,但我在 VS Extensibility API 中找不到任何此类扩展点。

还有一个想法:您可以随时滚动自己的工具窗口,例如“Ivan 的调试输出”侦听来自真实输出窗口的事件,并将新行(带有时间戳)回显到您自己的工具窗口。这可能是最难的选择,但应该完全符合您的要求。


3
投票
ANCIENT

问题添加新答案,生产力强大工具 2013 扩展生产力强大工具 2015 扩展 中有一项功能,可以向输出窗口添加时间戳余量,无需任何代码。


2
投票
$TICK

宏,打印出“当前”CPU 滴答声。


也请看看

Simon Chapman 的这些技巧


0
投票
niahtextfilter.com

上查看。 并显示 Visual Studio 调试会话中正在运行的相对时间戳:


0
投票

2022 17.4 发行说明 新增内容

在输出窗口中有一个带有时钟的按钮。

更多信息:

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

© www.soinside.com 2019 - 2024. All rights reserved.