Visual Studio调试器中如何打印内存中的字节范围?
在Visual Studio调试器中提取内存十六进制数据的方法
嘿,你要找的就是Visual Studio调试器里的内存转储命令,和WinDbg的db功能完全对标,能完美解决Debug.Print遇空字符就停的问题。具体用法如下:
核心命令:d系列(和WinDbg的db/dw等一致)
在VS的即时窗口或命令窗口(程序暂停调试时),直接用这些命令就能输出完整的十六进制数据:
db <内存地址>, <字节长度>:按字节输出十六进制值+对应ASCII字符,即使碰到空字符也会继续输出到指定长度
举个例子:要从地址0x0012FF40提取32字节的数据,输入:db 0x0012FF40, 32dw <内存地址>, <双字节数>:以16位为单位输出十六进制数据dd <内存地址>, <四字节数>:以32位为单位输出十六进制数据
你也可以直接用变量的地址来指定起始位置,比如你的结构体变量叫myStruct,要提取它的全部内容(假设大小是64字节),就输入:
db &myStruct, 64
备选:DumpMemory命令
如果觉得d系列太简洁记不住,还有更直白的DumpMemory命令,语法是指定起始和结束地址:
DumpMemory <起始地址>, <结束地址>
比如同样提取32字节,结束地址就是起始地址加32(十六进制是0x20),输入:
DumpMemory 0x0012FF40, 0x0012FF60
输出效果和db命令一致,不会被空字符截断。
这些命令都是VS调试器原生支持的,不用额外设置,直接在调试暂停时用就行,完全能满足你提取固定长度数据结构并以十六进制对呈现的需求。
内容的提问来源于stack exchange,提问作者Alex Schuldberg




