You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# Inspect variables and return values in the Visual Studio debugger
20
20
21
-
When you try to debug an issue, you are often attempting to find out whether variables are storing the values that you expect them to have in a particular app state. Some of the most useful features of the debugger are those that allow you to inspect variables.
21
+
When you try to debug an issue, you're often attempting to find out whether variables are storing the values that you expect them to have in a particular app state. Some of the most useful features of the debugger are those that allow you to inspect variables.
22
22
23
23
This article shows you how to inspect variables and view return values using the debugger in Visual Studio. The debugger provides several convenient ways to perform these tasks, including the following:
24
24
@@ -31,7 +31,7 @@ These features are only available while debugging. To learn how to start a debug
31
31
> [!NOTE]
32
32
> If this is the first time that you've tried to debug code, you might want to read [Debugging for absolute beginners](../debugger/debugging-absolute-beginners.md) and [Debugging techniques and tools](../debugger/write-better-code-with-visual-studio.md) before going through this article.
33
33
34
-
## View data tips in the code editor
34
+
## View variables in the code editor
35
35
36
36
Often, when debugging, you want a quick way to check property values on objects in the code editor, and the data tips are a good way to do it.
37
37
@@ -51,7 +51,7 @@ For detailed information on using data tips, see [View data values in data tips]
51
51
::: moniker range=">= vs-2022"
52
52
## View inline return values of method calls in the code editor
53
53
54
-
In .NET and C++ code, you can examine return values when you step over or out of a method call, which can be useful when the return value is not stored in a local variable. A method could be used as a parameter, or as the return value of another method.
54
+
In .NET and C++ code, you can examine return values when you step over or out of a method call, which can be useful when the return value isn't stored in a local variable. A method could be used as a parameter, or as the return value of another method.
55
55
56
56
Starting in Visual Studio 2022 version 17.12, you can view return values of method calls inline and not just in the [Autos window](#view-return-values-in-the-autos-window).
57
57
@@ -66,7 +66,7 @@ With Copilot enabled, you can also get targeted assistance related to the inline
66
66
67
67
You can use a **Watch** window to specify a variable (or an expression) that you want to keep an eye on.
68
68
69
-
While debugging, right-click an object and choose **Add Watch**.
69
+
While debugging, right-click an object and choose **Add Watch**. A Watch window opens.
In this example, you have a watch set on the object, and you can see its value change as you move through the debugger. Unlike the other variable windows, the **Watch** windows always show the variables that you are watching (they're grayed out when out of scope).
78
+
In this example, you've a watch set on the object, and you can see its value change as you move through the debugger. Unlike the other variable windows, the **Watch** windows always show the variables that you're watching (they're grayed out when out of scope).
79
79
80
80
For detailed information, see [Set a Watch using the Watch and QuickWatch Windows](../debugger/watch-and-quickwatch-windows.md).
81
81
82
-
## Inspect variables in the Autos and Locals windows
82
+
::: moniker range=">= vs-2022"
83
+
## Get AI assistance
84
+
85
+
If you have [Copilot](../ide/visual-studio-github-copilot-extension.md), you can get AI assistance while you're looking at variables in the Autos or Locals windows, or in data tips in the code editor. Right-click on a variable and use the **Ask Copilot** button. In this scenario, Copilot already knows the context for your question, so you don't need to provide context yourself in chat. For more information, see [Debug with Copilot](../debugger/debug-with-copilot.md).
86
+
::: moniker-end
87
+
88
+
## Inspect variables in debugger windows (Autos and Locals)
83
89
84
-
The **Autos** and **Locals** windows show variable values while you are debugging. The windows are only available during a debugging session. The **Autos** window shows variables used around the current statement where the debugger is paused. The **Locals** window shows variables defined in the local scope, which is usually the current function or method.
90
+
The **Autos** and **Locals** windows show variable values while you're debugging. The windows are only available during a debugging session. The **Autos** window shows variables used around the current statement where the debugger is paused. The **Locals** window shows variables defined in the local scope, which is usually the current function or method.
85
91
86
92
- To open the **Autos** window, while debugging, select **Debug** > **Windows** > **Autos**, or press **Ctrl**+**Alt**+**V** > **A**.
87
93
88
94
The **Autos** window is available for C#, Visual Basic, C++, and Python code, but not for JavaScript or F#.
89
95
90
96
- To open the **Locals** window, while debugging, select **Debug** > **Windows** > **Locals**, or press **Alt**+**4**.
91
97
92
-
Arrays and objects show in the **Autos** and **Locals** windows as tree controls. Select the arrow to the left of a variable name to expand the view to show fields and properties. Here is an example of a <xref:System.IO.FileStream?displayProperty=fullName> object in the **Locals** window:
98
+
Expandable arrays and objects show up in the **Autos** and **Locals** windows. Select the arrow to the left of a variable name to expand the view to show fields and properties. Here is an example of a <xref:System.IO.FileStream?displayProperty=fullName> object in the **Locals** window:
93
99
94
100
::: moniker range=">= vs-2022"
95
101

@@ -102,7 +108,7 @@ A red value in the **Locals** or **Autos** window means the value has changed si
102
108
103
109
The default numeric format in debugger windows is decimal. To change it to hexadecimal, right-click in the **Locals** or **Autos** window and select **Hexadecimal Display**. This change affects all debugger windows.
104
110
105
-
###Edit variable values in the Autos or Locals window
111
+
## Edit variable values in the Autos or Locals window
106
112
107
113
To edit the values of most variables in the **Autos** or **Locals** windows, double-click the value and enter the new value.
108
114
@@ -113,11 +119,11 @@ In native C++ code, you might have to qualify the context of a variable name. Fo
113
119
>[!CAUTION]
114
120
> Make sure you understand the consequences before you change values and expressions. Some possible issues are:
115
121
>
116
-
>- Evaluating some expressions can change the value of a variable or otherwise affect the state of your program. For example, evaluating `var1 = ++var2` changes the value of both `var1` and `var2`. These expressions are said to have [side effects](https://en.wikipedia.org/wiki/Side_effect_\(computer_science\)). Side effects can cause unexpected results if you are not aware of them.
122
+
>- Evaluating some expressions can change the value of a variable or otherwise affect the state of your program. For example, evaluating `var1 = ++var2` changes the value of both `var1` and `var2`. These expressions are said to have [side effects](https://en.wikipedia.org/wiki/Side_effect_\(computer_science\)). Side effects can cause unexpected results if you're not aware of them.
117
123
>
118
124
>- Editing floating-point values can result in minor inaccuracies because of decimal-to-binary conversion of fractional components. Even a seemingly harmless edit can result in changes to some of the bits in the floating-point variable.
119
125
120
-
###Search in the Autos or Locals window
126
+
## Search in the Autos or Locals window
121
127
122
128
You can search for keywords in the Name, Value, and Type columns of the **Autos** or **Locals** window using the search bar above each window. Hit ENTER or select one of the arrows to execute a search. To cancel an ongoing search, select the "x" icon in the search bar.
123
129
@@ -132,7 +138,7 @@ Use the left and right arrows (Shift+F3 and F3, respectively) to navigate betwee
132
138
133
139
To make your search more or less thorough, use the **Search Deeper** dropdown list at the top of the **Autos** or **Locals** window to select how many levels deep you want to search into nested objects.
134
140
135
-
###Pin properties in the Autos or Locals window
141
+
## Pin properties in the Autos or Locals window
136
142
137
143
> [!NOTE]
138
144
> This feature is supported for .NET Core 3.0 or higher.
@@ -147,7 +153,7 @@ You can also toggle property names and filter out non-pinned properties when vie
147
153
148
154

149
155
150
-
###Change the context for the Autos or Locals window
156
+
## Change the context for the Autos or Locals window
151
157
152
158
You can use the **Debug Location** toolbar to select a desired function, thread, or process, which changes the context for the **Autos** and **Locals** windows.
153
159
@@ -162,7 +168,7 @@ Set a breakpoint and start debugging. When the breakpoint is hit, execution paus
162
168

163
169
::: moniker-end
164
170
165
-
###<aname="bkmk_whatvariables"></a> Language differences in the Autos window (C#, C++, Visual Basic, Python)
171
+
## <aname="bkmk_whatvariables"></a> Language differences in the Autos window (C#, C++, Visual Basic, Python)
166
172
167
173
Different code languages display different variables in the **Autos** window.
168
174
@@ -215,7 +221,7 @@ Different code languages display different variables in the **Autos** window.
215
221
216
222
The variable `e` is uninitialized, because the line `e = 5` has not yet been executed.
217
223
218
-
### View return values in the Autos window
224
+
## View return values in the Autos window
219
225
220
226
In the following example, this C# code adds the return values of two functions:
221
227
@@ -256,7 +262,7 @@ To see the return values of the `sumVars()` and `subtractVars()` method calls in
256
262
257
263
## Open a visualizer to inspect variables
258
264
259
-
While you are debugging in Visual Studio, you can view large strings or complex objects with built-in visualizers that make the data easier to inspect. For example:
265
+
While you're debugging in Visual Studio, you can view large strings or complex objects with built-in visualizers that make the data easier to inspect. For example:
260
266
261
267
- The string visualizer shows text, XML, HTML, and JSON strings that are too long for a data tip or debugger window. It can also help you identify malformed strings. For more information, see [View strings in a string visualizer](../debugger/view-strings-visualizer.md).
262
268
- The DataSet and IEnumerable visualizers show .NET collection objects in a tabular visualizer. For more information, see [Tabular visualizers in Visual Studio](../debugger/view-data-in-tabular-visualizer.md)) objects.
@@ -275,12 +281,6 @@ To open a visualizer, you must be paused during debugging. Hover over a variable
275
281

276
282
::: moniker-end
277
283
278
-
::: moniker range=">= vs-2022"
279
-
## Get AI assistance
280
-
281
-
If you have [Copilot](../ide/visual-studio-github-copilot-extension.md), you can get AI assistance while you're looking at variables in the Autos or Locals windows, or in data tips. Right-click on a variable and use the **Ask Copilot** button. In this scenario, Copilot already knows the context for your question, so you don't need to provide context yourself in chat. For more information, see [Debug with Copilot](../debugger/debug-with-copilot.md).
282
-
::: moniker-end
283
-
284
284
## Related content
285
285
286
286
-[What is debugging?](../debugger/what-is-debugging.md)
0 commit comments