Visual C++ 调试器有一个强大的特性:伪变量。充分利用这个特性可以提高生产效率。
所谓的伪变量,其实就是由调试器支持并产生的调试数据,以变量的形式表现出来,我们可以在监视窗口中查看这些伪变量。
以下是Visual C++ 2005调试器所支持的伪变量(引用自MSDN,并且我补充了一个):
伪变量 | 功能 |
$err | GetLastError()的返回值 |
$handles | 显示应用程序中分配的句柄数。 |
$vframe | 显示当前堆栈帧的地址。 |
| 显示当前线程的线程 ID。 |
$ENV | 显示环境块的大小。 如果尝试在“值”列中编辑环境块的大小,则在您按下 Return 后就会在“输出”窗口中显示该环境块的内容。而不会更改环境块的大小。 |
$CMDLINE | 显示启动程序的命令行字符串的大小。 如果尝试在“值”列中编辑该大小,则在按下“返回”后会在“输出”窗口中显示该命令行字符串,而不会更改命令行字符串的大小。 |
或者
| 显示寄存器 registername 的内容。 通常,只需输入寄存器名便可以显示寄存器的内容。仅在寄存器名重载变量名时才需要使用此语法。如果寄存器名与当前范围内的某个变量名同名,则调试器将该名称解释为变量名。这时就需要使用 |
$clk | 以时钟形式显示时间。 |
$user | 显示一个结构,在该结构中含有应用程序运行于的帐户的帐户信息。出于安全原因,不显示密码信息。 |
其中,$err有一种更常见的用法$err,hr。
所谓hr,当然不是HumanResource(笑),它其实就是HResult。这是一个最最常用的伪变量,免去了我们手工在代码里插入GetLastError的痛苦(当然,不能因此就省略了代码中的错误处理和logging)。
至于显示CPU寄存器这个功能,更多的我们还是直接用register窗口,只有必要的时候,比如看sse等等或者为了突出显示才会用到,反正我几乎不用的,我更喜欢IDA Pro。
废话这么多,看一个例子就会用了: