【问题标题】:How to check which millisecond a fault causing a dump happend?如何检查导致转储的故障发生在哪毫秒?
【发布时间】:2017-08-14 16:08:10
【问题描述】:

我有一个在客户站点生成的核心转储。我只能从时间戳中找到转储文件是在哪一秒打开的。 (文件名的一部分。)

是否可以查看异常发生在哪一毫秒?

这将使我能够更准确地与日志文件进行比较(以毫秒为单位)。

【问题讨论】:

  • 我知道 windbg .time 命令告诉时间,但总是毫秒 000,这似乎不太可能。
  • WinDbg 使用GetCurrentProcessUptime,只记录二级精度,所以很遗憾我认为这是不可能的。您的日志文件中真的每秒有很多事件吗?
  • 肯定在日志文件停止时崩溃了?
  • @CodyGray 也许他们将其设置为 TRACE 以找出崩溃的原因。
  • @OrangeDog 一旦 Windows 完成制作转储文件,日志文件就会停止,这似乎需要 1-2 秒。足够长的时间,部分代码有时间记录实时计时器无法正常工作......

标签: c++ windows crash-dumps


【解决方案1】:

如上所述,“.time”是获取转储发生时间戳的方式。对于用户转储,这不太可能 - 根据我的观察,它始终只是二级精度。但是对于内核转储,我发现它精确到毫秒。

但是,我发现“.time”输出中的“系统正常运行时间”对于内核和用户转储都精确到毫秒。如果您能够将上次启动时间精确到毫秒(例如通过调用“wmic os get lastBootUpTime”),您可以将正常运行时间添加到 lastBootUpTime 以获得准确的转储发生时间戳。

【讨论】:

  • 也许记录系统正常运行时间是一个想法。谢谢!
  • 有趣...我想知道为什么内核转储会有更高的分辨率。他们必须使用不同的 API 来记录和检索时间戳。
  • 现在我们的日志组件在每个日志的开头写入系统正常运行时间。如果发生转储,只需查看转储和日志中的正常运行时间,使用计算器,瞧!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多