没有办法撤消 windbg 中的内存更改吗?

There's no way to undo memory changes in windbg?

我正在尝试撤消内存中的更改 window:

但是 CTRL-Z 不起作用,也没有这样的菜单项:

是否支持此功能?

在进行实时调试时,撤消功能一般用处不大。如果线程结束,您不能简单地重新创建它。如果跨过一条线,就不能轻易回到之前的状态。如果关闭文件句柄,则无法轻松重新打开它。

如果您更改了内存,WinDbg 应何时禁用撤消该操作的功能?一旦该内存被进程写入?或者即使在您编辑后写入了内存,您是否希望能够撤消?

那么要撤消到哪些内存内容呢?到您输入的值(即撤消流程完成的操作)或您输入它们之前的值(即撤消您所做的编辑,包括流程所做的更改)或仅撤消您编辑的那些值并且还没有被流程改变?

如您所见,在调试场景中实现撤消功能会变得非常困难。恕我直言,WinDbg 从未设计为具有撤消功能。

我什至会说人们不会使用内存 window 来编辑内存内容。为什么?

当您进行调试会话时,您希望记录您的步骤,以便您自己或其他人可以验证和重现您的操作。在这种情况下,您使用 .logopen 并记录您所做的一切。在命令 window 之外完成的操作将不会被记录,因此会破坏验证工作流程。

你会做什么?您可以使用 display 命令之一(dbdddp 或类似命令)在编辑前显示内存内容。然后使用 edit 命令(ebed、...)更改内存。每当您想要恢复旧值时,您都会查看 d 命令的先前输出并再次 e 这些值。