【问题标题】:Show milliseconds component of DateTime while debugging in Visual Studio在 Visual Studio 中调试时显示 DateTime 的毫秒组件
【发布时间】:2018-11-05 06:11:59
【问题描述】:

我正在尝试在 Visual Studio 中调试一些需要毫秒精度的东西,这使它变得非常繁重,因为 System.DateTime无参数 ToString() 表示不包括毫秒组件.

一个例子是,当验证System.DateTime 的数组是有序的时,我希望在从本地窗口检查时能够看到毫秒组件。

DateTime.ToString中寻求有关格式字符串的帮助

它似乎继承自系统全球化设置,不允许您以毫秒为单位指定格式(出于好的,显而易见的原因):

谢谢。

【问题讨论】:

  • ToString() 可以接收格式参数,您可以在格式中指定毫秒
  • 您可以使用程序集级属性来更改DateTimes 在调试器中的格式。没有必要创建一个类。
  • 艾米是正确的,我的解决方案将是矫枉过正。我只是想了很多,您可以在调试中添加一个显示毫秒属性的手表。
  • 您可以在 Visual Studio 中更改格式。见docs.microsoft.com/en-us/visualstudio/debugger/…
  • @LewsTherin DateTime 是一个结构体,不能从中继承。

标签: c# visual-studio debugging time-format


【解决方案1】:

在我回答之前,我首先想就这个问题回答您的一位cmets:

这需要编写代码。我说的是在调试时检查值。

我的回答确实涉及编写一行代码;但是,它影响调试器可视化工具,并且仅DateTime 的每个实例,并且不会影响代码的运行时性能。

也就是说:

您可以添加程序集级属性DebuggerDisplay 来更改调试器显示类的方式。这是我自己的代码中的一个基本示例:

[assembly: DebuggerDisplay("Start={StartDate} | End={EndDate}]", Target = typeof(DateRange))]

在上面的代码中,第一个参数是一个字符串,定义了你想在调试器中看到的模板。

您可以将它放在任何文件中,但老实说,它与其他程序集级属性一起属于 AssemblyInfo.cs 文件。

现在,我认为在您的情况下,您希望将字符串参数设置为这样(我没有尝试过):

[assembly: DebuggerDisplay("{ToString(\"fff\")}", Target = typeof(DateTime))]

如果不正确,请随时告诉我,我会做出必要的更正。

【讨论】:

  • 该格式可以正常工作。虽然我假设 OP 想要格式 包括 毫秒,而不是 只是 毫秒。
  • @Evk 好吧,是的。 OP 确实说他不是在寻求有关格式字符串本身的帮助,所以我认为没关系。
【解决方案2】:

我建议在调试时添加watch。即使代码本身从不访问这些属性,您也可以查看代码中使用的对象的属性。只需注意 DateTime 实例的 Millisecond 属性即可。

【讨论】:

    【解决方案3】:

    我对调试时的意思有点困惑。 我假设您正在 VisualStudio 中运行应用程序。

    在调试时,您可以通过将鼠标悬停在该属性上来查看毫秒属性,然后单击展开箭头。

    https://msdn.microsoft.com/de-de/library/system.datetime.millisecond(v=vs.110).aspx

    您可以使用 VisualStudio 和 Add Watch 功能来观察属性或简单地使用断点来实现这一点。

    如果断点会使您的测试结果无法使用,您必须实现一个调试机制,例如使用 Console.WriteLine 写下所需的信息。然后您可以在输出窗口中看到结果。

    【讨论】:

    • 将鼠标悬停在 DateTime 上并扩展其属性,或者扩展数组中数十行的属性是繁重的部分;)
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2011-05-23
    • 2010-12-20
    • 2014-12-07
    相关资源
    最近更新 更多