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