Visual C++ 调试器伪变量

Visual C++ 调试器有一个强大的特性:伪变量。充分利用这个特性可以提高生产效率。

所谓的伪变量,其实就是由调试器支持并产生的调试数据,以变量的形式表现出来,我们可以在监视窗口中查看这些伪变量。

以下是Visual C++ 2005调试器所支持的伪变量(引用自MSDN,并且我补充了一个):

伪变量 功能
$err GetLastError()的返回值
$handles 显示应用程序中分配的句柄数。
$vframe 显示当前堆栈帧的地址。

$TID

显示当前线程的线程 ID。
$ENV

显示环境块的大小。

如果尝试在“值”列中编辑环境块的大小,则在您按下 Return 后就会在“输出”窗口中显示该环境块的内容。而不会更改环境块的大小。

$CMDLINE

显示启动程序的命令行字符串的大小。

如果尝试在“值”列中编辑该大小,则在按下“返回”后会在“输出”窗口中显示该命令行字符串,而不会更改命令行字符串的大小。

$ registername

或者

@ registername

显示寄存器 registername 的内容。

通常,只需输入寄存器名便可以显示寄存器的内容。仅在寄存器名重载变量名时才需要使用此语法。如果寄存器名与当前范围内的某个变量名同名,则调试器将该名称解释为变量名。这时就需要使用 $registername@registername

$clk 以时钟形式显示时间。
$user

显示一个结构,在该结构中含有应用程序运行于的帐户的帐户信息。出于安全原因,不显示密码信息。

其中,$err有一种更常见的用法$err,hr。

所谓hr,当然不是HumanResource(笑),它其实就是HResult。这是一个最最常用的伪变量,免去了我们手工在代码里插入GetLastError的痛苦(当然,不能因此就省略了代码中的错误处理和logging)。

至于显示CPU寄存器这个功能,更多的我们还是直接用register窗口,只有必要的时候,比如看sse等等或者为了突出显示才会用到,反正我几乎不用的,我更喜欢IDA Pro。

废话这么多,看一个例子就会用了:

3

原文地址:https://www.cnblogs.com/skogkatt/p/4163275.html