如何在堆栈上表示类型为Variant且值为Empty的变量?

时间:2018-09-21 08:07:48

标签: vbscript stack storage rhino3d

以下说明来自Rhino Developer Docs

  

     

在VBScript中声明变量时,该变量之前的值   第一个分配未定义,即Empty

     
Dim varValue ' Empty value
     

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

因此Empty用于声明变量。如果声明变量,则会在堆栈上保留存储空间,但是堆栈上的Empty值是什么?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

堆栈是什么意思? 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继续。程序在运行完所有代码后也将停止。再次按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/

-