全局变量的名称存储在应用程序编译时创建的符号文件中。调试器将全局变量的名称解释为一个虚拟地址。任何接受地址作为参数的命令都可以接受变量名称作为参数。因此,可以使用在之前的《通过虚拟地址访问内存》章节中描述的全部指令读写全局变量。
除此之外,也可以使用?(计算表达式evaluate expression)指令展示与符号相关的地址。
Visual Studio和WinDbg提供了使用者可以使用(附加到命令上)的用户接口元素查看和编辑全局变量。可以参考《在Visual Studio查看和编辑内存及寄存器》和《在WinDbg查看和编辑全局变量》两章。
思考下面的例子。假设用户想要检查一个32位整数类型的全局变量MyCounter,同时假设默认进制是10进制。
也可以获取变量地址并展示如下:
0:000> ? MyCounter
Evaluate expression: 1244892 = 0012fedc
0:000> dd 0x0012fedc L1
0012fedc 00000052
第一条命令输出告诉使用者MyCounter的地址是0x0012FEDC。也可以使用d*(展示内存display memory)命令在这个地址上展示一个双字(也可以使用1244892,即该地址的十进制版本,然而,多数c语言程序员更倾向于使用0x0012FEDC)。第二条指令告诉使用者MyCounter的数值是0x52(即十进制下的82).
也可以使用如下指令实现上述过程
0:000> dd MyCounter L1
0012fedc 00000052
可使用如下指令将MyCounter的数值改为十进制的83.
0:000> ed MyCounter 83
这个示例使用了十进制输入,因为十进制格式对于一个整数来说更加自然。
然而,d*命令的输出仍然是以16进制格式展示的。
0:000> dd MyCounter L1
0012fedc 00000053