如果在没有调试器的计算机上进行测试,比如说客户的计算机,我遇到了一个可能已经破坏程序状态但实际上并没有崩溃的错误,我知道我可以使用 Windows 任务管理器进行内存转储(右键单击在进程名称上,创建转储文件)。
我可以将这些与 WinDbg 一起使用来查看内存等,但对我来说最有用的是能够将转储恢复到内存中,以便我可以继续与程序交互。这可能吗?如果是这样,怎么做?是否有可以恢复它的工具或者我需要自己编写。
如果在没有调试器的计算机上进行测试,比如说客户的计算机,我遇到了一个可能已经破坏程序状态但实际上并没有崩溃的错误,我知道我可以使用 Windows 任务管理器进行内存转储(右键单击在进程名称上,创建转储文件)。
我可以将这些与 WinDbg 一起使用来查看内存等,但对我来说最有用的是能够将转储恢复到内存中,以便我可以继续与程序交互。这可能吗?如果是这样,怎么做?是否有可以恢复它的工具或者我需要自己编写。
典型的用户模式转储或小型转储不包含足够的信息来执行此操作。虽然它们包含所有用户模式内存,但它们不包含内核内存,因此文件或网络套接字等内核资源的打开句柄不会包含在转储中(即使它们是,硬盘很可能已更改,因此只是尝试写入硬盘可能会进一步损坏您的系统)。
我看到恢复内存转储的唯一方法是恢复完整内存和所有其他状态,如硬盘状态,这可以通过大多数虚拟机软件完成(但是,这将在恢复时断开所有网络连接;感谢大多数程序可以比丢失的文件句柄更好地处理丢失的网络连接)。
我发现我可以使用 Hyper-V 快照来做到这一点。如果我在虚拟机中运行我的程序,我可以选择转储内存,创建快照,必要时传输转储,稍后再回来,恢复快照并继续程序。