在 VS 2005 中只转储一部分内存

Posted

技术标签:

【中文标题】在 VS 2005 中只转储一部分内存【英文标题】:Dump only a portion of memory in VS 2005 【发布时间】:2009-08-19 16:56:47 【问题描述】:

有没有人知道是否有一种方法可以使用 VS 只将一块内存转储到磁盘?基本上,我想给它一个地址和一个长度,然后让它把内存写入磁盘。这样我就可以做一个二进制差异。 谢谢。

【问题讨论】:

你是什么意思'有没有办法只转储一个块'?为什么不能使用标准文件 IO/指针技术? 我可以编写代码为我做这件事,但如果可能的话,我宁愿使用 IDE。我也可以使用 printf 进行调试,但我宁愿使用监视窗口。 在调试时喜欢...? 【参考方案1】:

我有点惊讶 VS 不会让你在内存转储窗口中这样做...

你也许可以通过 VS 命令窗口得到你想要的(或接近它):

>Tools.LogCommandWindowOutput c:\temp\testdump.log /overwrite
>Debug.ListMemory /Count:16 0x00444B20
0x00444B20  00 00 00 00 00 00 00 00 13 00 12 00 86 07 19 00  ................
>Tools.LogCommandWindowOutput /off

如果您愿意使用 WinDBG(或 ntsd/cdb),您可以使用 .writemem 调试器命令来完成您想要的操作。

【讨论】:

【参考方案2】:

我相信你只能保存一个完整的二进制小型转储。但是,您可以使用“调试内存”窗口并复制/粘贴到文本文件来进行内存差异。

【讨论】:

是的,问题是内存窗口一次显示不够。【参考方案3】:

好的,我在 VS 2008 中尝试过,但我相信 VS 2005 应该允许这样做:

如果内存是一个字符串(如果它不包含零字节),您可以将以下内容放入观察窗口:(unsigned char*)(ptr),1024 在文本可视化器中查看 1kB。但是,这在零字节处停止,所以如果你有二进制数据,这将不起作用。

【讨论】:

以上是关于在 VS 2005 中只转储一部分内存的主要内容,如果未能解决你的问题,请参考以下文章

VS2005 检测内存泄漏的方法(转载)

进程的 GDB 全内存转储

VS2005的Command Window 调试命令的总结(转载)

Java 本机内存跟踪堆提交的数量远远超过堆转储的总数

gdb 搜索核心转储内存

将 Access 表转储到 CSV 时减少内存使用量