【问题标题】:saving program state (visual studio 2008)保存程序状态(Visual Studio 2008)
【发布时间】:2011-05-24 15:11:10
【问题描述】:

我正在调试(在 Visual Studio 2008 中)我用 C++ 编写的实用程序。将大量输入文件与我的慢速机器结合起来,可能需要 6 个小时以上才能到达我需要观察程序执行是否有异常的地步。

我可能在这里抓住了稻草,但是有人知道 Visual Studio 中的功能或插件或类似的东西,我可以保存程序执行状态,这样我就可以绕过到达我需要的地方所花费的时间成为?

【问题讨论】:

  • 我希望你听说过Unit testing
  • 当然。处理自我强加的测试用例以测试功能和 1.8 gigs 的实时数据是两个独立的野兽

标签: c++ visual-studio visual-studio-2008 savestate


【解决方案1】:

我不确定在 Visual Studio 中做这种事情的可能性,但如果你找不到任何东西,我会尝试使用虚拟机并保存机器的状态。 它可能会非常缓慢,但从长远来看可能会有所帮助。 祝你好运

【讨论】:

  • 这个想法还不错,我认为它尽可能接近“保存程序状态”。
【解决方案2】:

您需要的是conditional breakpoint...有关详细信息,请参阅此网址:

http://msdn.microsoft.com/en-us/library/7sye83ce%28v=VS.90%29.aspx

这个想法是,您知道断点生效的条件是什么,然后当这些条件为真时,断点将触发,暂停执行。然后,您可以在早上来并开始逐步执​​行代码。

如果您确实有一个确切的点想要导致中断,您可以放入一个编程断点 DebugBreak(),这将导致抛出一个断点异常。 Visual Studio 调试器将捕获它并在此时暂停执行。

或者,启用gflags 使用ADPlus 运行程序,并在您认为导致问题的代码处抛出未处理的异常。让程序崩溃,ADPlus 将生成进程内存的完整崩溃转储。您启用了 gflags 的事实意味着您将获得带有漂亮边框的内存分配(通常为0xCDCDCDCD)以便于调试。

最后,您还可以使用 Microsoft 的 DbgHelp.dll library 生成一个小型转储,该转储可以以编程方式捕获各种级别的信息(如上述解决方案所要求的,不会出现崩溃)。你想要的函数是MiniDumpWriteDump。您可以使用参数编写普通的小型转储或完整的内存转储。如果可能,这应该从一个单独的进程中完成(您可以在自己的进程中等待句柄)。

【讨论】:

  • 这基本上就是我现在正在做的事情。深夜开始执行,当我进入办公室时检查它。重新启动它,等待并做其他事情,在一天结束时再次检查,然后启动它并稍后在家远程检查并重复该过程。
  • 虽然条件断点会使执行速度减慢一个数量级,但有一点缺点,因此这 6 小时可能会变成 24 小时。如果您想要附加到代码中的特定点达到一个条件然后我认为最好放入一个while (true) sleep();类型的循环,这样你早上进去的时候就可以用调试器闯入
  • @basil 如果您确实有一个确切的点要导致中断,您可以输入一个编程断点DebugBreak(),这将导致抛出一个断点异常。 Visual Studio 调试器将捕获它并在此时暂停执行。
  • DOWNVOTERS 请帮帮我。不知道我在说什么导致了反对票。
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
相关资源
最近更新 更多