- Просмотр переменных с помощью окна контрольных значений и быстрой проверки Watch variables with Watch windows and QuickWatch
- Наблюдение за переменными с помощью окна контрольных значений Observe variables with a Watch window
- Использование выражений в окне контрольных значений Use expressions in a Watch window
- Поиск в окне контрольных значений Search in the Watch window
- Закрепление свойств в окне контрольных значений Pin properties in the Watch window
- Обновление контрольных значений Refresh watch values
- Побочные эффекты выражения Expression side effects
- Использование идентификаторов объектов в окне «Контрольные значения» (C# и Visual Basic) Use Object IDs in the Watch window (C# and Visual Basic)
- Динамическое представление и окно «Контрольные значения» Dynamic View and the Watch window
- Наблюдение за одной переменной или выражением с помощью быстрой проверки Observe a single variable or expression with QuickWatch
Просмотр переменных с помощью окна контрольных значений и быстрой проверки Watch variables with Watch windows and QuickWatch
Во время отладки для просмотра переменных и выражений можно использовать окна контрольных значений и диалоговое окно Быстрая проверка. While you’re debugging, you can use Watch windows and QuickWatch to watch variables and expressions. Окна доступны только во время сеанса отладки. The windows are only available during a debugging session.
В окнах контрольных значений в процессе отладки могут отображаться несколько переменных. Watch windows can display several variables at a time while debugging. В диалоговом окне Быстрая проверка отображается одна переменная за раз. Его следует закрыть до того, как можно будет продолжить отладку. The QuickWatch dialog displays a single variable at a time, and must be closed before debugging can continue.
Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих и статью Методы и инструменты отладки. If this is the first time that you’ve tried to debug code, you may want to read Debugging for absolute beginners and Debugging techniques and tools before going through this article.
Наблюдение за переменными с помощью окна контрольных значений Observe variables with a Watch window
Можно открыть несколько окон контрольных значений и наблюдать за несколькими переменными в окне контрольных значений. You can open more than one Watch window, and observe more than one variable in a Watch window.
Например, чтобы организовать просмотр значений a , b и c , в следующем коде: For example, to set a watch on the values of a , b , and c in the following code:
Установите точку останова на строке c = a + b; , щелкнув в левое поле, выбрав Отладка > Переключить точку останова или нажав клавишу F9. Set a breakpoint on the c = a + b; line by clicking in the left margin, selecting Debug > Toggle Breakpoint, or pressing F9.
Начните отладку, выбрав зеленую стрелку Старт или выбрав Отладка > Начать отладку или нажав клавишу F5. Start debugging by selecting the green Start arrow or Debug > Start Debugging, or press F5. Выполнение останавливается в точке останова. Execution pauses at the breakpoint.
Откройте окно Контрольные значения, выбрав Отладка > Окна > Контрольные значения > Контрольные значения 1 или нажав клавиши CTRL+ALT+W > 1. Open a Watch window by selecting Debug > Windows > Watch > Watch 1, or pressing Ctrl+Alt+W > 1.
Вы можете открыть дополнительные окна контрольных значений, выбрав окна 2, 3 или 4. You can open additional Watch windows by selecting windows 2, 3, or 4.
В окне Контрольные значения выберите пустую строку и тип переменной a . In the Watch window, select an empty row, and type variable a . Сделайте то же самое для b и c . Do the same for b and c .
Продолжите отладку, выбрав Отладка > Шаг с заходом или нажав клавишу F11 по мере необходимости для перехода. Continue debugging by selecting Debug > Step Into or pressing F11 as needed to advance. В процессе итерации по циклу for значения переменных в окне Контрольные значения должны меняться. The variable values in the Watch window change as you iterate through the for loop.
Только для C++ For C++ only,
Может потребоваться уточнить контекст имени переменной или выражение, использующее имя переменной. You may need to qualify the context of a variable name, or an expression that uses a variable name. Контекст — это функция, файл исходного кода или модуль, где находится переменная. The context is the function, source file, or module where a variable is located. Если необходимо уточнить контекст, используйте синтаксис оператора контекста (C++) в поле Имя в окне Контрольные значения. If you have to qualify the context, use the context operator (C++) syntax in the Name in the Watch window.
Вы можете добавить имена регистров и имена переменных с помощью $ или @ в поле Имя в окне Контрольные значения. You can add register names and variable names using $ or @ to the Name in the Watch window. Для получения дополнительной информации см. Pseudovariables. For more information, see Pseudovariables.
Использование выражений в окне контрольных значений Use expressions in a Watch window
В окне Контрольные значения можно просмотреть любое допустимое выражение, которое распознает отладчик. You can observe any valid expression recognized by the debugger in a Watch window.
Например, для кода, приведенного в предыдущем разделе, можно вычислить среднее трех значений, введя (a + b + c) / 3 в окне контрольных значений: For example, for the code in the preceding section, you can get the average of the three values by entering (a + b + c) / 3 in the Watch window:
Правила вычисления выражений в окне Контрольные значения обычно аналогичны правилам вычисления выражений в используемом языке программирования. The rules for evaluating expressions in the Watch window are generally the same as the rules for evaluating expressions in the code language. Если в выражении есть синтаксическая ошибка, должна произойти та же ошибка компилятора, которая возникла бы в редакторе кода. If an expression has a syntax error, expect the same compiler error as in the code editor. Например, опечатка в предыдущем выражении выдает следующую ошибку в окне Контрольные значения: For example, a typo in the preceding expression produces this error in the Watch window:
В окне Контрольные значения может появиться значок кружки с двумя волнистыми линиями. A circle with two wavy lines icon may appear in the Watch window. Он указывает на то, что отладчик не вычисляет выражение из-за возможной зависимости между потоками. This icon means the debugger doesn’t evaluate the expression because of a potential cross-thread dependency. Для оценки кода необходимо, чтобы другие потоки в приложении выполнялись временно, но, поскольку вы находитесь в режиме приостановки выполнения, все потоки в приложении обычно останавливаются. Evaluating the code requires other threads in your app to run temporarily, but since you are in break mode, all threads in your app are usually stopped. Разрешение временного запуска других потоков может привести к непредвиденным результатам в работе приложения, а также к тому, что отладчик будет игнорировать различные события, например точки останова и исключения, созданные в этих потоках. Allowing other threads to run temporarily can have unexpected effects on the state of your app, and the debugger may ignore events such as breakpoints and exceptions on those threads.
Поиск в окне контрольных значений Search in the Watch window
Используя панель поиска над каждым окном, можно искать ключевые слова в столбцах «Имя», «Значение» и «Тип» в окне Контрольные значения. You can search for keywords in the Name, Value, and Type columns of the Watch window using the search bar above each window. Нажмите клавишу ВВОД или щелкните одну из стрелок, чтобы выполнить поиск. Hit ENTER or select one of the arrows to execute a search. Чтобы отменить текущий поиск, нажмите значок «x» на панели поиска. To cancel an ongoing search, select the «x» icon in the search bar.
Для перехода между найденными совпадениями используйте стрелки влево и вправо (SHIFT + F3 и F3 соответственно). Use the left and right arrows (Shift+F3 and F3, respectively) to navigate between found matches.
Чтобы сделать поиск более или менее детальным, воспользуйтесь раскрывающимся списком Поиск на уровень глубже в верхней части окна Контрольные значения, чтобы выбрать число уровней детализации поиска во вложенных объектах. To make your search more or less thorough, use the Search Deeper dropdown at the top of the Watch window to select how many levels deep you want to search into nested objects.
Закрепление свойств в окне контрольных значений Pin properties in the Watch window
Эта возможность поддерживается в .NET Core 3.0 или более поздних версий. This feature is supported in .NET Core 3.0 or higher.
С помощью средства Закрепляемые свойства можно быстро проверить объекты на основе их свойств в окне контрольных значений. You can quickly inspect objects by their properties in the Watch window with the Pinnable Properties tool. Чтобы воспользоваться этим средством, наведите указатель мыши на свойство и выберите значок булавки либо щелкните правой кнопкой мыши и в контекстном меню выберите пункт Закрепить элемент в избранном. To use this tool, hover over a property and select the pin icon that appears or right-click and select the Pin Member as Favorite option in the resulting context menu. Свойство будет размещено в верхней части списка свойств объекта, а имя и значение свойства будут отображаться в столбце Значение. This bubbles up that property to the top of the object’s property list, and the property name and value is displayed in the Value column. Чтобы открепить свойство, щелкните значок булавки еще раз или в контекстном меню выберите пункт Открепить элемент в избранном. To unpin a property, select the pin icon again or select the Unpin Member as Favorite option in the context menu.
При просмотре списка свойств объекта в окне контрольных значений можно также включать и отключать отображение имен свойств и отфильтровывать незакрепленные свойства. You can also toggle property names and filter out non-pinned properties when viewing the object’s property list in the Watch window. Доступ к каждому параметру можно получить, нажимая кнопки на панели инструментов над окном контрольных значений. You can access both options by selecting the buttons in the toolbar above the watch window.
Обновление контрольных значений Refresh watch values
При вычислении выражения в окне Контрольные значения может отображаться значок обновления (круговая стрелка). A refresh icon (circular arrow) might appear in the Watch window when an expression is evaluated. Значок обновления указывает на ошибочные или устаревшие значения. The refresh icon indicates an error or a value that is out of date.
Чтобы обновить значение, щелкните значок обновления или нажмите клавишу ПРОБЕЛ. To refresh the value, select the refresh icon, or press the spacebar. Отладчик попытается пересчитать выражение. The debugger tries to reevaluate the expression. Однако вы, возможно, не захотите или не сможете повторно вычислить выражение, в зависимости от того, почему значение не было вычислено. However, you may not want or be able to reevaluate the expression, depending on why the value wasn’t evaluated.
Наведите указатель мыши на значок обновления или обратитесь к столбцу Значение, чтобы узнать причину, по которой выражение не было вычислено. Hover over the refresh icon or see the Value column for the reason the expression wasn’t evaluated. Причины. Reasons include:
При вычислении выражения возникла ошибка, как в предыдущем примере. An error occurred as the expression was being evaluated, as in the previous example. Возможно, истекло время ожидания или переменная находится вне области действия. A timeout might occur, or a variable might be out of scope.
Выражение содержит вызов функции, который мог вызвать побочный эффект в приложении. The expression has a function call that could trigger a side effect in the app. См. раздел Побочные эффекты. See Expression side effects.
Автоматическое вычисление свойств и неявные вызовы функций должны быть отключены. Automatic evaluation of properties and implicit function calls is disabled.
Если значок обновления отображается ввиду того, что автоматическое вычисление свойств и неявные вызовы функций отключены, его можно включить, установив флажок Включить вычисление свойств и другие неявные вызовы функций в разделе Сервис > Параметры > Отладка > Общие. If the refresh icon appears because automatic evaluation of properties and implicit function calls is disabled, you can enable it by selecting Enable property evaluation and other implicit function calls in Tools > Options > Debugging > General.
Демонстрация использования значка обновления To demonstrate using the refresh icon:
В разделе Сервис > Параметры > Отладка > Общие снимите флажок Включить вычисление свойств и другие неявные вызовы функций. In Tools > Options > Debugging > General, clear the Enable property evaluation and other implicit function calls check box.
Введите следующий код и в окне Контрольные значения задайте контрольное значение свойства list.Count . Enter the following code, and in the Watch window, set a watch on the list.Count property.
Приступите к отладке. Start debugging. В окне Контрольные значения отображается примерно следующее сообщение: The Watch window shows something like the following message:
Чтобы обновить значение, щелкните значок обновления или нажмите клавишу ПРОБЕЛ. To refresh the value, select the refresh icon, or press the spacebar. Отладчик повторно вычислит выражение. The debugger reevaluates the expression.
Побочные эффекты выражения Expression side effects
Вычисление некоторых выражений может привести к изменению значения некоторой переменной или иным образом повлиять на состояние приложения. Evaluating some expressions can change the value of a variable, or otherwise affect the state of your app. Например, вычисление следующего выражения изменяет значение var1 : For example, evaluating the following expression changes the value of var1 :
Этот код может вызвать побочный эффект. This code can cause a side effect. Побочные эффекты могут усложнить отладку из-за изменения способа работы приложения. Side effects can make debugging more difficult by changing the way your app operates.
Выражение, у которого есть побочные эффекты, вычисляется только один раз при первом его вводе. An expression with side effects is evaluated only once, when you first enter it. После этого выражение отображается в окне Контрольные значения серым цветом, а дальнейшие вычисления отключаются. After that, the expression appears grayed out in the Watch window, and further evaluations are disabled. В столбце подсказки или Значение объясняется, что выражение вызывает побочный эффект. The tooltip or Value column explains that the expression causes a side effect. Можно принудительно выполнить повторное вычисление, щелкнув значок обновления рядом с этим значением. You can force reevaluation by selecting the refresh icon that appears next to the value.
Один из способов предотвратить побочные эффекты — отключить автоматическое вычисление функций. One way to prevent the side effects designation is to turn off automatic function evaluation. В разделе Сервис > Параметры > Отладка > Общие снимите флажок Включить вычисление свойств и другие неявные вызовы функций. In Tools > Options > Debugging > General, deselect Enable property evaluation and other implicit function calls.
Только для C#: если вычисление свойств и неявных вызовов функций отключено, можно принудительно вычислить выражение, добавив модификатор формата ac к переменной Имя в окне Контрольные значения. For C# only, when evaluation of properties or implicit function calls is turned off, you can force evaluation by adding the ac format modifier to a variable Name in the Watch window. См. раздел Определители формата C#. See Format specifiers in C#.
Использование идентификаторов объектов в окне «Контрольные значения» (C# и Visual Basic) Use Object IDs in the Watch window (C# and Visual Basic)
Иногда возникает необходимость наблюдать за поведением определенного объекта. Sometimes you want to observe the behavior of a specific object. Например, может потребоваться отслеживать объект, на который ссылается локальная переменная, после того как эта переменная вышла из области действия. For example, you might want to track an object referred to by a local variable after that variable has gone out of scope. В C# и Visual Basic можно создавать идентификаторы объектов для определенных экземпляров ссылочных типов и использовать их в окне Контрольные значения и условиях точек останова. In C# and Visual Basic, you can create Object IDs for specific instances of reference types, and use them in the Watch window and in breakpoint conditions. Идентификатор объекта создается службами отладки среды CLR и связан с объектом. The Object ID is generated by the common language runtime (CLR) debugging services and associated with the object.
Идентификаторы объектов создают слабые ссылки, которые не предотвращают сборку мусора для объекта. Object IDs create weak references that don’t prevent the object from being garbage collected. Они действительны только в рамках текущего сеанса отладки. They are valid only for the current debugging session.
В следующем коде метод MakePerson() создает Person с помощью локальной переменной: In the following code, the MakePerson() method creates a Person using a local variable:
Чтобы узнать имя Person в методе DoSomething() , можно добавить ссылку на идентификатор объекта Person в окне Контрольные значения. To find out the name of the Person in the DoSomething() method, you can add a reference to the Person Object ID in the Watch window.
Установите точку останова в коде после создания объекта Person . Set a breakpoint in the code after the Person object has been created.
Приступите к отладке. Start debugging.
Когда выполнение приостанавливается на точке останова, откройте окно Локальные, выбрав Отладка > Окна > Локальные. When execution pauses at the breakpoint, open the Locals window by choosing Debug > Windows > Locals.
В окне Локальные щелкните переменную Person правой кнопкой мыши и выберите пункт Создать идентификатор объекта. In the Locals window, right-click the Person variable and select Make Object ID.
В окне Локальные вы должны увидеть знак доллара ( $ ) плюс число, которое является идентификатором объекта. You should see a dollar sign ($) plus a number in the Locals window, which is the Object ID.
Добавьте идентификатор объекта в окно Контрольные значения, щелкнув правой кнопкой мыши идентификатор объекта и выбрав пункт Добавить контрольное значение. Add the object ID to the Watch window by right-clicking the Object ID and selecting Add Watch.
Задайте другую точку останова в методе DoSomething() . Set another breakpoint in the DoSomething() method.
Продолжайте отладку. Continue debugging. Когда выполнение остановится в методе DoSomething() , в окне Контрольные значения отобразится объект Person . When execution pauses in the DoSomething() method, the Watch window displays the Person object.
Чтобы просмотреть свойства объекта, например Person.Name , необходимо включить вычисление свойств, выбрав Сервис > Параметры > Отладка > Общие > Включить вычисление свойств и другие неявные вызовы функций. If you want to see the object’s properties, such as Person.Name , you must enable property evaluation by selecting Tools > Options > Debugging > General > Enable property evaluation and other implicit function calls.
Динамическое представление и окно «Контрольные значения» Dynamic View and the Watch window
Некоторые языки сценариев (например, JavaScript или Python) используют динамическую или неявную типизацию, а в .NET версии 4.0 и более поздней поддерживаются объекты, которые трудно наблюдать в обычных окнах отладки. Some scripting languages (for example, JavaScript or Python) use dynamic or duck typing, and .NET version 4.0 and later supports objects that are difficult to observe in the normal debugging windows.
В окне Контрольные значения эти объекты отображаются как динамические объекты, которые создаются из типов, реализующих интерфейс IDynamicMetaObjectProvider. The Watch window displays these objects as dynamic objects, which are created from types that implement the IDynamicMetaObjectProvider interface. В узле динамического объекта показаны динамические члены динамического объекта, но не разрешено изменять их значения. Dynamic object nodes show the dynamic members of the dynamic objects, but don’t allow editing of the member values.
Чтобы обновить значения в динамическом представлении, щелкните значок обновления рядом с узлом динамического объекта. To refresh Dynamic View values, select the refresh icon next to the dynamic object node.
Чтобы отобразить только динамическое представление для объекта, добавьте описатель динамического формата после имени динамического объекта в окне Контрольные значения. To display only the Dynamic View for an object, add a dynamic format specifier after the dynamic object name in the Watch window:
- Для C#: ObjectName, dynamic For C#: ObjectName, dynamic
- Для Visual Basic: $dynamic, ObjectName For Visual Basic: $dynamic, ObjectName
- Отладчик C# автоматически не пересчитывает значения, отображаемые в динамическом представлении при переходе на новую строку кода. The C# debugger doesn’t automatically reevaluate the values in the Dynamic View when you step to the next line of code.
- В Visual Basic отладчик автоматически обновляет выражения, добавляемые с помощью динамического представления. The Visual Basic debugger automatically refreshes expressions added through the Dynamic View.
- Вычисление членов динамического представления может иметь побочные эффекты. Evaluating the members of a Dynamic View can have side effects.
Вставка новой переменной контрольного значения, которая приводит объект к динамическому объекту To insert a new watch variable that casts an object to a dynamic object:
- Щелкните правой кнопкой мыши любой дочерний элемент динамического представления. Right-click any child of a Dynamic View.
- Выберите Добавить контрольное значение. Choose Add Watch. object.name становится ((dynamic) object).name и появляется в новом окне Контрольные значения. The object.name becomes ((dynamic) object).name and appears in a new Watch window.
Отладчик также добавляет дочерний узел динамического представления объекта в окно Видимые. The debugger also adds a Dynamic View child node of the object to the Autos window. Чтобы открыть окно Видимые, во время отладки последовательно выберите пункты Отладка > Окна > Видимые. To open the Autos window, during debugging, select Debug > Windows > Autos.
Динамическое представление также улучшает процесс отладки для COM-объектов. Dynamic View also enhances debugging for COM objects. Когда отладчик встречает COM-объект, инкапсулированный в System.__ComObject, он добавляет узел Динамическое представление для объекта. When the debugger gets to a COM object wrapped in System.__ComObject, it adds a Dynamic View node for the object.
Наблюдение за одной переменной или выражением с помощью быстрой проверки Observe a single variable or expression with QuickWatch
Окно Быстрая проверка можно использовать для наблюдения за одной переменной. You can use QuickWatch to observe a single variable.
Например, для следующего кода: For example, for the following code:
Чтобы просмотреть переменную a , выполните следующие действия: To observe the a variable,
Установите точку останова на строке a = a + b; . Set a breakpoint on the a = a + b; line.
Приступите к отладке. Start debugging. Выполнение останавливается в точке останова. Execution pauses at the breakpoint.
Выберите переменную a в коде. Select the variable a in the code.
Выберите Отладка > Быстрая проверка, нажмите клавиши SHIFT+F9 или щелкните правой кнопкой мыши и выберите в контекстном меню команду Быстрая проверка. Select Debug > QuickWatch, press Shift+F9, or right-click and select QuickWatch.
Появится диалоговое окно Быстрая проверка. The QuickWatch dialog appears. Переменная a находится в поле Выражение со значением 1. The a variable is in the Expression box with a Value of 1.
Чтобы вычислить выражение, использующее переменную, введите выражение, например a + b , в поле Выражение и выберите Пересчитать. To evaluate an expression using the variable, type an expression such as a + b in the Expression box, and select Reevaluate.
Чтобы добавить переменную или выражение из окна Быстрая проверка в окно Контрольные значения, выберите Добавить контрольное значение. To add the variable or expression from QuickWatch to the Watch window, select Add Watch.
Нажмите Закрыть, чтобы закрыть окно Быстрая проверка. Select Close to close the QuickWatch window. (Быстрая проверка — это модальное диалоговое окно, поэтому вы не можете продолжать отладку, пока оно открыто.) (QuickWatch is a modal dialog, so you can’t continue debugging as long as it is open.)
Продолжайте отладку. Continue debugging. Переменную можно наблюдать в окне Контрольные значения. You can observe the variable in the Watch window.