如何在堆栈上表示值为 Empty 的 Variant 类型变量?
How is a variable of type Variant with value Empty represented on the stack?
以下解释来自Rhino Developer Docs
Empty
When you declare a variable in VBScript, the variable’s value before
the first assignment is undefined, or Empty
.
Dim varValue ' Empty value
So basically, Empty
says “I am an uninitialized variant.” If you need
to detect whether a variable actually is an empty variant and not a
string or a number, you can use IsEmpty
. Alternatively, you could use
TypeName
or VarType
, but IsEmpty
is best.
所以Empty
用于声明变量。如果你声明了一个变量,你在栈上保留了存储空间,但是Empty在栈上的值是多少?
VBScript 变量的类型为 Variant
。变体表示可以更改类型的值。在内存中,Variant类型是一个16字节的structure。
如果变量为空(Empty
值),则 vt
成员(存储变量引用的数据类型)的值为 0x0000
(VT_EMPTY
)
堆栈是什么意思? VBScript 的虚拟机堆栈或 CPU 堆栈。对于CPU 堆栈使用调试器
您也可以在调试器中启动。
windbg 或 ntsd(ntsd 是一个控制台程序,可能已安装)。两者也来自 Windows.
的调试工具
下载并安装 Windows
的调试工具
http://msdn.microsoft.com/en-us/windows/hardware/hh852363
安装 Windows SDK,但只需选择调试工具。
在 C:\
中创建一个名为 Symbols 的文件夹
开始Windbg
。文件菜单-符号文件路径并输入
srv*C:\symbols*http://msdl.microsoft.com/download/symbols
然后
windbg -o -g -G c:\windows\system32\cmd.exe /k batfile.bat
所有程序在加载后但在开始 运行 程序之前停止。按 g
继续。程序在完成 运行ning 所有代码后也会停止。再次按 g
.
您可以按 F12 停止它,kb
将显示调用堆栈(g
继续程序)。如果有错误,它也会停止并显示它们。
键入 lm
列出加载的模块,键入 x *!*
列出符号,键入 bp [symbolname]
设置断点。
断点是程序遇到BP时停止的地方。允许您阅读堆栈。 kb
显示调用堆栈和函数的前 4 个参数。
VB6
如果在 VB6 中编程,那么此环境变量 link=/pdb:none
将符号存储在 dll 中而不是单独的文件中。确保使用无优化编译程序并勾选创建符号调试信息框。两者都在项目属性的“编译”选项卡上。
CoClassSyms (http://microsoft.com/msj/0399/hood/hood0399.aspx) 也可以从类型库中创建符号。
.
查看背景信息 https://blogs.msdn.microsoft.com/ericlippert/2004/04/19/runtime-typing-in-vbscript/
--
以下解释来自Rhino Developer Docs
Empty
When you declare a variable in VBScript, the variable’s value before the first assignment is undefined, or
Empty
.Dim varValue ' Empty value
So basically,
Empty
says “I am an uninitialized variant.” If you need to detect whether a variable actually is an empty variant and not a string or a number, you can useIsEmpty
. Alternatively, you could useTypeName
orVarType
, butIsEmpty
is best.
所以Empty
用于声明变量。如果你声明了一个变量,你在栈上保留了存储空间,但是Empty在栈上的值是多少?
VBScript 变量的类型为 Variant
。变体表示可以更改类型的值。在内存中,Variant类型是一个16字节的structure。
如果变量为空(Empty
值),则 vt
成员(存储变量引用的数据类型)的值为 0x0000
(VT_EMPTY
)
堆栈是什么意思? VBScript 的虚拟机堆栈或 CPU 堆栈。对于CPU 堆栈使用调试器
您也可以在调试器中启动。
windbg 或 ntsd(ntsd 是一个控制台程序,可能已安装)。两者也来自 Windows.
的调试工具下载并安装 Windows
的调试工具http://msdn.microsoft.com/en-us/windows/hardware/hh852363
安装 Windows SDK,但只需选择调试工具。
在 C:\
中创建一个名为 Symbols 的文件夹开始Windbg
。文件菜单-符号文件路径并输入
srv*C:\symbols*http://msdl.microsoft.com/download/symbols
然后
windbg -o -g -G c:\windows\system32\cmd.exe /k batfile.bat
所有程序在加载后但在开始 运行 程序之前停止。按 g
继续。程序在完成 运行ning 所有代码后也会停止。再次按 g
.
您可以按 F12 停止它,kb
将显示调用堆栈(g
继续程序)。如果有错误,它也会停止并显示它们。
键入 lm
列出加载的模块,键入 x *!*
列出符号,键入 bp [symbolname]
设置断点。
断点是程序遇到BP时停止的地方。允许您阅读堆栈。 kb
显示调用堆栈和函数的前 4 个参数。
VB6
如果在 VB6 中编程,那么此环境变量 link=/pdb:none
将符号存储在 dll 中而不是单独的文件中。确保使用无优化编译程序并勾选创建符号调试信息框。两者都在项目属性的“编译”选项卡上。
CoClassSyms (http://microsoft.com/msj/0399/hood/hood0399.aspx) 也可以从类型库中创建符号。 .
查看背景信息 https://blogs.msdn.microsoft.com/ericlippert/2004/04/19/runtime-typing-in-vbscript/
--