Как переменная типа Variant со значением Empty представлена ​​в стеке? - PullRequest
0 голосов
/ 21 сентября 2018

Следующее объяснение взято из Rhino Developer Docs

Пусто

Когда вы объявляете переменную в VBScript, ее значение перед первым присваиваниемundefined или Empty.

Dim varValue ' Empty value

Так что, в основном, Empty говорит: «Я неинициализированный вариант». Если вам нужно определить, является ли переменная на самом деле пустым вариантом, а не строкой илиномер, вы можете использовать IsEmpty.В качестве альтернативы вы можете использовать TypeName или VarType, но лучше всего IsEmpty.

Так что Empty используется для объявления переменных.Если вы объявляете переменную, вы резервируете хранилище в стеке, но каково значение Empty в стеке?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Что вы подразумеваете под стеком?Стек виртуальной машины VBScript или стек ЦП.Для стека ЦПУ используйте отладчик

. Вы также можете запускать в отладчике.

windbg или ntsd (ntsd - консольная программа и может быть установлена).Оба они также из Средства отладки для Windows.

Загрузите и установите Средства отладки для Windows

http://msdn.microsoft.com/en-us/windows/hardware/hh852363

Установите Windows SDK, но просто выберите инструменты отладки.

Создайте папку с именем Symbols в C: \

Start 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/

-

0 голосов
/ 21 сентября 2018

Переменные VBScript имеют тип Variant.Вариант представляет значение, которое может изменить тип.В памяти тип Variant представляет собой 16-байтовую структуру .

Если переменная пуста (Empty значение), то элемент vt (в котором хранится тип данных, на которые ссылается переменная) будет иметь значение 0x0000 (VT_EMPTY)

...