Visual Studio 调试器中的伪变量

伪变量是用于在变量窗口或 快速监视 对话框中显示某些信息的术语。 可以采用与输入普通变量相同的方式输入伪变量。 但是,伪变量不是变量,并且与程序中的变量名称不对应。

Example

假设你正在编写本地代码应用程序,并希望查看你应用程序中被分配的句柄数。 在 “监视 ”窗口中,可以在 “名称” 列中输入以下伪变量,然后按 Return 计算它:

$handles

在本机代码中,可以使用下表中显示的伪变量:

伪变量 功能
$err 显示使用函数 SetLastError 设置的最后一个错误值。 显示的值表示 GetLastError 函数将返回的内容。

用于 $err,hr 查看此值的解码形式。 例如,如果最后一个错误为 3,那么$err,hr会显示为ERROR_PATH_NOT_FOUND : The system cannot find the path specified.
$handles 显示应用程序中分配的句柄数。
$vframe 显示当前堆栈帧的地址。
$tid 显示当前线程的线程 ID。
$env 在字符串查看器中显示环境块。
$cmdline 显示启动程序的命令行字符串。
$pid 显示进程 ID。
$ registername



@ registername
显示寄存器 registername 的内容。

通常,只需输入注册名称即可显示注册内容。 唯一需要使用此语法的情况是当寄存器名称覆盖变量名称时。 如果寄存器名称与当前作用域中的变量名称相同,调试器会将名称解释为变量名称。 这时 $寄存器名@寄存器名 就派上用场。
$clk 以时钟周期为单位显示时间。
$user 显示一个结构,其中包含运行应用程序的帐户的帐户信息。 出于安全原因,不会显示密码信息。
$exceptionstack 显示当前 Windows 运行时异常的堆栈跟踪。 $ exceptionstack 仅适用于 UWP 应用。 $ exceptionstack 不支持 C++ 和 SEH 异常
$returnvalue 显示方法的返回值。

在 C# 中,可以使用下表所示的伪变量:

伪变量 功能
$exception 显示有关最后一个异常的信息。 如果未发生异常,则 $exception 评估会显示一条错误消息。

禁用异常助手时,当发生异常时, $exception 会自动添加到 “局部变量 ”窗口。
$user 显示一个结构,其中包含运行应用程序的帐户的帐户信息。 出于安全原因,不会显示密码信息。
$returnvalue 显示 .NET 方法的返回值。
$threadSmallObjectHeapBytes 显示当前线程在小型对象堆中分配的字节总数。 (.NET 6+)
$threadUserOldHeapBytes 显示当前线程在用户旧堆中分配的字节总数。 User Old Heap = Large Object Heap + Pinned Object Heap (.NET 6+)

在 Visual Basic 中,可以使用下表中显示的伪变量:

伪变量 功能
$exception 显示有关最后一个异常的信息。 如果未发生异常,则 $exception 评估会显示一条错误消息。
$delete$$delete 删除在 “即时 ”窗口中创建的隐式变量。 语法为 $delete,变量$delete,变量.
$objectids$listobjectids 将所有活跃对象标识符显示为指定表达式的子级。 语法为 $objectid,表达式$listobjectids,表达式.
$ N# 显示对象 ID 等于 N 的对象。
$dynamic 显示实现此对象的特殊IDynamicMetaObjectProvider节点。 接口。 语法为 $dynamic,对象。 此功能仅适用于使用 .NET Framework 版本 4 或更高版本的代码。