1

以下解释来自Rhino Developer Docs

空的

当您在 VBScript 中声明一个变量时,该变量在第一次赋值之前的值是未定义的,或者Empty.

Dim varValue ' Empty value

所以基本上,Empty说“我是一个未初始化的变体”。如果您需要检测变量是否实际上是空变量而不是字符串或数字,您可以使用IsEmpty. 或者,您可以使用 TypeNameor VarType,但IsEmpty最好。

所以Empty用于声明变量。如果你声明一个变量,你在栈中保留存储,但是栈上的 Empty 的值是多少?

4

2 回答 2

6

VBScript 变量的类型为Variant. 变体表示可以更改类型的值。在内存中,Variant 类型是一个 16 字节的结构

如果变量为空(Empty值),则vt成员(存储变量引用的数据类型)的值为0x0000VT_EMPTY

于 2018-09-21T09:12:00.727 回答
1

你说的堆栈是什么意思?VBScript 的虚拟机堆栈或CPU 堆栈。对于 CPU 堆栈,使用调试器

您也可以在调试器中启动。

windbg 或 ntsd(ntsd 是一个控制台程序,可能已安装)。两者都来自 Debugging Tools For 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继续。程序在运行完所有代码后也会停止。再次按下g

您可以按F12停止它并kb显示调用堆栈(g继续程序)。如果有错误,它也会停止并显示它们。

键入lm以列出加载的模块、x *!*列出符号并bp [symbolname]设置断点。

断点是程序遇到 BP 时停止的地方。允许您读取堆栈。kb显示调用堆栈和函数的前 4 个参数。

VB6

如果在 VB6 中编程,则此环境变量link=/pdb:none将符号存储在 dll 中,而不是单独的文件中。确保在没有优化的情况下编译程序并勾选 Create Symbolic Debug Info 框。两者都在项目属性的编译选项卡上。

CoClassSyms ( http://microsoft.com/msj/0399/hood/hood0399.aspx ) 也可以从类型库中制作符号。.

请参阅背景https://blogs.msdn.microsoft.com/ericlippert/2004/04/19/runtime-typing-in-vbscript/

--

于 2018-09-21T09:20:07.647 回答