如何从c#中的上次运行状态进行调试?

时间:2014-03-14 13:02:44

标签: c# .net serialization

我正在调试一个c#应用程序。它有两个部分。第一部分进行了大量的计算,这将需要将近1个小时。然后它将调用第二部分中的方法,我将获得异常。我想调试异常。异常后,应用程序崩溃。因此每次我调试调试过程时,我都要等待1小时进行初始计算。有什么方法可以阻止这种情况,例如保存状态或其他东西,以便我可以从这一点继续调试吗?

3 个答案:

答案 0 :(得分:2)

没有"拯救国家"我知道的。
该程序在记忆中 您需要将输入保存到磁盘然后读取输入 如果某些输入是对象(而不是值),则需要序列化对象 Object Serialization in the .NET Framework

如果您的输入只是值,那么您可以在调用失败的方法时对值进行硬编码。

即使您的某些输入是对象,您也可以使用硬编码来创建对象,并使用硬编码来分配值。但是,如果某些值仅通过运行长计算来分配,那么这不是一个选项。

调试异常有什么问题?
你不知道哪一行抛出异常?

答案 1 :(得分:0)

您可以做什么,但是我建议您从短步骤中拆分较长的步骤,以便您可以单独运行它们,有关详细信息,请参阅Blam's answer

如果您需要对程序进行任何更改,如果您需要修改的DLL或EXE已经加载到内存中,则以下技巧将无效,但这可能会帮助您解决问题。您需要做的是使用虚拟机和remote debugger的组合。

在您选择的软件中创建虚拟机,并在VM映像上安装远程调试器。运行您的程序直到它几乎完成了长部分,然后根据您使用的任何VM软件的指示获取VM的快照。现在,当您想要调试最后一部分时只需重新加载快照,将Visual Studio连接到远程调试器,然后就可以从该预设置状态开始监视应用程序。

答案 2 :(得分:0)

您可以在程序崩溃时生成内存转储。

例如,在Windows 7上,您可以通过右键单击任务管理器中的进程,然后选择"创建转储文件"来执行此操作。确保在关闭任何崩溃对话框等之前执行此操作。

然后,您应该能够使用WinDbg或Visual Studio等工具重复调试崩溃时的状态。

说,我总是发现调试内存转储充满了困难。如果您可以修改程序以将长时间运行的计算结果保存到磁盘并稍后读取它以重现崩溃,我会先尝试。