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


Общие возможности вычислителя выражений

Обновлен: Ноябрь 2007

Этот раздел применим для следующих версий.

Выпуск

Visual Basic

C#

C++

Web Developer

Экспресс-выпуск

Тема применяется Тема применяется Тема применяется Тема применяется

Standard

Тема применяется Тема применяется Тема применяется Тема применяется

Pro и Team

Тема применяется Тема применяется Тема применяется Тема применяется

Условные обозначения:

Тема применяется

Применимо

Тема не применяется

Неприменимо

Тема применяется, но команда по умолчанию сокрыта

Команда или команды по умолчанию скрыты.

В этом разделе описаны различные функции вычислителя выражений, которые являются общими для отладчика и отличаются только по языку.

Неявные переменные

В 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#

Сведения о том, как указать условие останова, см. в разделе Практическое руководство. Установка условия точки останова.

См. также

Основные понятия

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

Другие ресурсы

Выражения в отладчике

Путеводитель по отладчику