我希望能够在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.

并显示在视觉工作室调试会话中的相对时间戳:Niah Text Filter debug output

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top