从visual studio内存窗口保存数据

时间:2010-11-11 14:49:31

标签: visual-studio debugging memory window

是否有可能在任何二进制文件中保存一些缓冲区,以便在独立的十六进制编辑器中查看。

例如,我可以将数据从VS中的内存窗口保存到十六进制转储,但不能保存为ASCII吗?

6 个答案:

答案 0 :(得分:6)

user142207在调查VS内部方面做得很好,我建议解决方案。 我的另一种方式是由我的同事Sergey S.发明的, 这非常有用:

视窗: 使用几个函数ReadProcessMemory / WriteProcessMemory。它需要一个独立的应用程序,使用目标进程ID调用这些函数,如:

dumper.exe <debugged process id> <memory_start_addr> <memory_length>

这个应用程序可以在VS调试会话期间直接调用(与Linux相比,没有这种可能性)。我们可以在监视窗口中捕获内存地址,然后将地址传递给转储器并瞧。正如user142207在他的文章中所说,它在长时间重新编译的项目中非常有用。

Linux / MacOS有不同的方法。例如:从gdb控制台,使用命令dump memory。此命令也可以在调试会话期间直接使用。

答案 1 :(得分:5)

我不知道这是否有帮助,但您可以使用WinDbg的.writemem命令。它需要一个文件名和一个内存范围,并将其(作为二进制文件)转储到磁盘。

答案 2 :(得分:2)

有一个扩展名:https://marketplace.visualstudio.com/items?itemName=OvidiuIonescu.VSDebugTool。它在VisualStudio窗口中打开其控制台,允许将内存转储到文件和其他几个内存操作(在控制台中输入&#34; help&#34;以获取详细信息)。

此外,一些十六进制编辑器(例如Hex Editor Neo)可以将进程内存作为普通文件进行浏览。也许你会找到一个有这个功能的免费编辑器。

答案 3 :(得分:2)

StNickolay的答案引用了一些名为&#34; dumper&#34;但是,不知何故,我无法在网络上找到它(同样,user142207早已不复存在)。所以我创建了相同的工具 - 它打开了运行过程(即使连接了调试器)并将其内存的一部分复制到文件中。当你想要存储一些结构以供日后使用并且不想使用VS Memory View&#34; copy&#34;输出。享受!

https://github.com/Alexx999/Dumper

答案 4 :(得分:1)

Visual Studio调试器中的监视窗口可以运行函数,如果您正在调试自己的代码,您可以在代码中添加一些函数,以便将缓冲区保存到文件并从监视窗口调用它。 例如:

void WriteToFile(char* name, void* buffer, size_t size)
{
    FILE* fp;
    fopen_s(&fp, name, "wb");
    fwrite(buffer, 1, size, fp);
    fclose(fp);
}

然后在观察窗口中输入这样的内容:

WriteToFile("c:\\temp\\dump.dat", buffer, len)

答案 5 :(得分:0)

我怀疑你可以从ClrMD获得你想要的东西,然后你可以随意使用相同的数据。

如果您真的想要核心转储,那么WinDbg可能就是您正在寻找的东西?

MSDN博客上还有这篇文章:https://blogs.msdn.microsoft.com/dondu/2010/10/24/writing-minidumps-in-c/

它描述了如何以编程方式在.NET中创建dump-ish事物。