是否可以不断转储进程的内存以记录正在发生的每个更改?例如,如果我有一个修改数组内容的程序,我想在修改之前知道该数组的内容。我想一个程序可以保存初始内存,然后保存文件中的所有更改,我只是通过我知道的数组的修改内容搜索文件。然后我会在那一刻之前寻找特定内存位置的变化并找到初始内容。 这样的程序是否存在?如果是这样,你会推荐什么计划?
编辑:我用C ++编写了一个程序,用pcap捕获另一个进程的数据包,我想知道这些数据包是如何在该程序中构建的。我正在使用Windows。答案 0 :(得分:0)
请注意,内存内容(或可能)的更改速度远远快于磁盘的写入速度。
此外,您的问题是特定于操作系统的。我猜你正在使用Linux。
在所有情况下,请尽早设计您的应用程序。
也许您正在寻找application checkpointing。如果在Linux上,请考虑BLCR。
也许您正在寻找一些persistence机制。一种可能的方法可能是在程序中的某些位置明确地保持应用程序的状态,这些点经常执行。 call stack或continuations的持久性是一个难题
您可能希望为JSON使用文字格式(例如serialization)。您可能对数据库技术感兴趣,关系型SQL(例如Sqlite或PostGreSQL)或noSQL mongodb
持久性和检查点可能与garbage collection算法有关(特别是复制GC)。
某些语言实现能够持久保存整个堆。例如,在Common Lisp中,SBCL实施提供save-lisp-and-die
对于调试,您可能需要watchpoints或gcore(1)命令。
请注意,如果您fork(2)您的进程并且立即睡眠或空闲,则您将在子进程中保留您的地址空间的快照。
另请阅读transactional memory& ACID properties