Общие возможности вычислителя выражений
В этом разделе описаны различные функции вычислителя выражений, которые являются общими для отладчика и отличаются только по языку.
Неявные переменные
В Visual Basic и C# можно создавать неявные переменные с помощью вычислителя выражений. Эти неявные переменные никогда не выйдут из области видимости и могут рассматриваться как любая другая переменная.
В C# можно создать неявную переменную, объявив ее в вычислителе выражений. Например, можно ввести следующий код C# в окне Интерпретация:
int b = 100;
При выполнении этого кода в окне Интерпретация новая неявная переменная появляется в окне Локальные со знаком "$" перед именем переменной, в данном случае $b.
В Visual Basic невозможно объявлять неявные переменные в вычислителе выражений. Однако, если в вычислителе выражений Visual Basic используется необъявленная переменная, неявная переменная создается автоматически. В Visual Basic неявные переменные не указываются в окне Локальные.
Точки останова
При использовании окна "Интерпретация" для вычисления содержащего точку останова метода или функции Visual Basic или C# по достижению этой точки останова новый фрейм появляется в Стеке вызовов. Ниже приведен пример на C#:
class Program
{
static void Main(string[] args)
{
// Breakpoint here:
int a = 20;
}
}
Если задать точку останова там, куда указывает комментарий, скомпилировать и выполнить программу, нажав клавишу F5, вы попадете на точку останова обычным путем. Если теперь вычислить метод Main путем ввода текста Program.Main(null) в окно Интерпретация, точка останова будет достигнута во второй раз останов, и появится запись для метода в Стеке вызовов.
Вычисление в окне "Контрольные значения"
Во избежание возможных нежелательных побочных эффектов вычисление результата вызова функции или метода не происходит автоматически на каждом шаге отладчика. Вместо этого значок позволяет вручную обновить результат. Он появится в столбце Значение. Это позволяет вычислить результат вызова вручную. Дополнительные сведения см. в разделе Побочные эффекты и выражения.
Идентификация объектов
Эта возможность недоступна для Visual Basic.
Некоторые приложения создают много экземпляров класса. В таких приложениях часто полезно иметь идентификатор, чтобы четко отличать экземпляры класса. Это может быть полезно, например, если определенный экземпляр класса не работает должным образом или если конкретный экземпляр был вставлен несколько раз в коллекцию, которая должна содержать его в единственном числе.
Идентификация собственного объекта
При отладке неуправляемого кода можно однозначно определить объект с помощью его адреса. Это важно по двум причинам:
Можно отслеживать объект только с помощью его адреса. Также можно использовать адрес в следующих целях:
Просмотр значения объекта по этому адресу.
Проверка на равенство. Часто адрес объекта можно использовать так же, как саму переменную объекта.
Можно использовать адрес объекта, экземпляра, чтобы установить точку останова в методе этого конкретного экземпляра.
Например, предположим, что имеется объект, являющийся экземпляром класса CMyType, с адресом 0xcccccccc. Можно задать точку останова функции в методе aMethod этого экземпляра следующим образом:
((CMyType *) 0xcccccccc)->aMethod
Идентификация управляемого объекта
При работе с управляемым кодом не допускается использование адреса объекта для его идентификации. Вместо этого используйте целое число — идентификатор объекта, создаваемый службами отладки среды CLR и связанный с объектом. Это число — положительное целое число, создаваемое службами отладки среды CLR. Идентификатор объекта имеет единственное предназначение — уникальным образом идентифицировать объект.
Дескрипторы объектов отображаются в виде десятичных целых переменной длины, со знаком номера (#), добавленным после самого числа, без предшествующих нулей, например 5#. Дескрипторы отображаются в столбце Значение в различных окнах данных отладчика.
Чтобы создать идентификатор объекта для переменной, щелкните ее правой кнопкой мыши и выберите команду Создать идентификатор объекта. Отладчик отобразит число со знаком "решетка" (#) после него, например 123#. Чтобы удалить идентификатор объекта, щелкните правой кнопкой мыши переменную и выберите команду Удалить идентификатор объекта.
При достижении точки останова можно ввести дескриптор переменной в окно Контрольные значения. Отладчик отображает значение идентификатора объекта, его можно развернуть и изучить, как и любую другую переменную.
Можно использовать идентификатор объекта, чтобы задать точку останова в методе конкретного экземпляра. Предположим, имеется объект, являющийся экземпляром класса CMyType, с идентификатором 5#. У класса CMyType есть метод aMethod. Можно установить точку останова функции в методе aMethod экземпляра 5# следующим образом:
((CMyType) 5#).aMethod
Можно также использовать идентификатор объекта в условии точки останова. В следующем примере показано, как можно использовать идентификатор объекта в условии.
this == 5#