使用Visual Studio C++ 2013。我正在运行一个数字处理程序,所以它是线性/可预测的。然而,我有一个测试,需要几个小时的运行,在Assert之前,由于我的代码中的逻辑错误。我可以在崩溃之前获得断点,但我不能后退而不从头开始。
有没有什么方法可以让Visual Studio保存我的程序状态,这样我就可以在那个点重新启动?
程序状态非常复杂,我需要做很多工作才能将所有状态保存到文件中,以便以后恢复。
使用Visual Studio C++ 2013。我正在运行一个数字处理程序,所以它是线性/可预测的。然而,我有一个测试,需要几个小时的运行,在Assert之前,由于我的代码中的逻辑错误。我可以在崩溃之前获得断点,但我不能后退而不从头开始。
有没有什么方法可以让Visual Studio保存我的程序状态,这样我就可以在那个点重新启动?
程序状态非常复杂,我需要做很多工作才能将所有状态保存到文件中,以便以后恢复。
3条答案
按热度按时间oo7oh9g91#
在Visual Studio中进行调试时(即使是从断点进行调试),|保存转储为.保存当前调试状态。保存时,请确保选择“Minidump With Heap”,以便可以访问堆内存。
稍后,您可以双击.dmp文件,在Visual Studio中打开它。
wpx232ag2#
您可以考虑虚拟计算机。您可以制作它们的快照并保存它们。这可能是一个矫枉过正,但保证工作。
bd1hkmkf3#
简单的方法是保存有意义的状态变量作为一个对象,然后将其写入JSON。然后添加一个单元测试,它接受一个输入JSON文件,将其转换(将其转换回对象),然后调用您的方法。
例如,假设你有这样一个类型,你的方法采用这个类型(这是你有意义的状态)
假设这是
SlowMovingClass
的输入参数,看起来像这样:例如,我们可以修改你的类,读取一个环境变量,看看
ShouldLog
值是否设置为true。如果是,那么我们可以将这个.方法的输入值转换为JSON。
然后将这一行添加到要转换并写入JSON的方法的主体中。
完成了所有这些之后,您现在可以编写一个单元测试来获取此缓存值并调用您的方法。然后你就可以跳过所有关于缓慢的对象状态填充过程的内容,直接回到问题的核心。
这些年来,这为我节省了很多时间。