如何创建和恢复内存映像转储
How to create and restore memory image dump
那么,我有一个编码有问题的应用程序,其中有许多数据结构需要以特定的方式恢复。
我必须实现一次撤销,将应用程序恢复到一个非常复杂的操作之前的状态。
我的团队成员建议保存文件并恢复它,以确保所有内容都得到恢复。这样做是一个非常耗费资源和时间的操作。文件保存和加载可能需要一分钟或更长时间来处理所有解析和事件。
所以我有了这个想法:如果我可以以某种方式保存内存状态,就像在转储文件中一样,我可以保存图像状态并在必要时恢复它。
这是可能的吗?如果有,怎么做?
这通常是不可能的。如果你尝试了,它可能会以微妙和不可预测的方式失败。下面是一些潜在的问题:
- 进程可能存储它的进程ID和线程ID。当您恢复它时,没有好的方法来确保它获得相同的id。
- 进程可能有文件被锁定。没有办法确保这些文件处于相同的状态。
- 进程可能打开了不再存在的文件。考虑临时文件
- 进程可能有套接字或管道在内部或甚至对其他进程开放。
- 该进程可能操纵了与其他进程通信的共享状态,停止该共享状态处于不一致状态的进程可能会中断其他进程。
- 当您尝试重新启动进程时,进程可能对dll或其他可能不相同的可执行文件有锁定。
还有很多其他问题。一般来说,提供应用程序保存/恢复功能的平台要么在允许应用程序做的事情上非常有限,要么需要应用程序之间的密切合作。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- C++ - 读取进程内存到缓冲区,写入进程内存(同一缓冲区上的新值)将缓冲区恢复为旧值
- 正在从内存不足故障中恢复
- 为什么mstats和malloc_zone_statistics在释放后不显示恢复的内存
- 静态成员回收内存并从异常中恢复
- 保存和恢复内存位置列表的清洁机制
- 如何创建和恢复内存映像转储
- 使用NDK从本机内存恢复图像会返回无显示的黑色图像