Поделиться через


Псевдопеременные в отладчике Visual Studio

Псевдопеременные — термины, используемые для отображения определенных сведений в окне переменных или в диалоговом окне Быстрая проверка. Псевдопеременная вводится таким же способом, что и обычная переменная. Однако псевдопеременные не являются переменными и не соответствуют именам переменных в программе.

Пример

Предположим, что вы пишете приложение на исходном коде, и хотите просмотреть общее число дескрипторов в приложении. В окне Контрольные значения можно ввести следующую псевдопеременную в столбце Имя, затем нажать "Возврат" для вычисления:

$handles

В нативном коде можно использовать псевдопеременные, указанные в этой таблице:

Псевдопеременная Function
$err Отображает последнее значение ошибки, заданное функцией SetLastError. Представляет значение, которое показывает, что будет возвращено функцией GetLastError.

Используйте $err,hr, чтобы посмотреть расшифрованную форму этого значения. Например, если последняя ошибка имела значение 3, $err,hr отобразит сообщение ERROR_PATH_NOT_FOUND : The system cannot find the path specified.
$handles Показывает число дескрипторов в приложении.
$vframe Выводит адрес текущего кадра стека.
$tid Отображает идентификатор текущего потока.
$env Отображает блок среды в средстве просмотра строк.
$cmdline Отображает строковую переменную командной строки, которая запустила программу.
$pid Отображает идентификатор процесса.
$ registername

or

@ registername
Отображает содержимое регистра имярегистра.

Как правило, можно отобразить содержимое регистра простым вводом имени регистра. Единственный момент, когда необходимо использовать такой синтаксис, это когда имя регистра перегружает имя переменной. Если имя регистра совпадает с именем переменной в текущей области, отладчик интерпретирует имя как имя переменной. В таком случае удобно использовать $имярегистра@ или имярегистра.
$clk Отображает время в циклах синхронизации.
$user Отображает структуру с данными учетной записи для учетной записи, под которой выполняется приложение. По соображениям безопасности сведения о паролях не отображаются.
$exceptionstack Отображает трассировку стека текущего исключения среды выполнения Windows. $ exceptionstack работает только в приложениях UWP. $ exceptionstack не поддерживается для исключений C++ и SEH.
$returnvalue Отображает возвращаемое значение метода.

В C# можно использовать псевдопеременные, указанные в этой таблице.

Псевдопеременная Function
$exception Отображает сведения о последнем исключении. Если исключения не было, вычисление $exception отображает сообщение об ошибке.

При отключенном помощнике по исключениям $exception автоматически добавляется в окно Локальные при возникновении исключения.
$user Отображает структуру с данными учетной записи для учетной записи, под которой выполняется приложение. По соображениям безопасности сведения о паролях не отображаются.
$returnvalue Отображает возвращаемое значение метода .NET.
$threadSmallObjectHeapBytes Отображает общее количество байтов, выделенных в куче небольших объектов текущим потоком. (.NET 6+)
$threadUserOldHeapBytes Отображает общее количество байтов, выделенных в старой куче пользователя текущим потоком. User Old Heap = Large Object Heap + Pinned Object Heap (.NET 6+)

В Visual Basic можно использовать псевдопеременные, указанные в этой таблице:

Псевдопеременная Function
$exception Отображает сведения о последнем исключении. Если исключения не было, вычисление $exception отображает сообщение об ошибке.
$delete или $$delete Удаляет неявную переменную, которая была создана в окне Интерпретация. Синтаксис: переменная $delete, или переменная $delete,..
$objectids или $listobjectids Отображает все идентификаторы активных объектов в виде дочерних элементов указанного выражения. Синтаксис: выражение $objectid, или выражение $listobjectids,..
$ N # Отображает объект с идентификатором, равным N.
$dynamic Отображает специальный узел динамического представления для объекта, который реализует IDynamicMetaObjectProvider. Интерфейс. Синтаксис: объект $dynamic,. Эта функция применима только к коду, который использует версию .NET Framework 4 и выше.