Локальный отладчик windows visual studio
Visual Studio предоставляет прекрасные возможности отладки вне зависимости от языка, который вы используете: от C#, VB и C++ до JavaScript и Python, XAML и HTML. Возможна отладка всех поддерживаемых языков. Предлагаем ознакомиться со сведениями о том, как приступить к отладке в Visual Studio 2019.
Любая платформа или место
В локальной, удаленной и рабочей среде.
Где бы ни запускался ваш код, Visual Studio может выполнить его отладку — от запуска приложения для Windows на рабочем столе или в эмуляторе Android до подключения удаленного экземпляра Azure, устройства iOS или игровой приставки, а также любого браузера.
Вы можете выполнять отладку проблем вне сети в рабочей среде, используя такие возможности, как IntelliTrace и глубокий анализ файлов дампа. Подробнее об этих функциях см. в нашем пошаговом руководстве по использованию IntelliTrace.
Детальный контроль
Вам решать, где именно и когда прервать выполнение и проверить состояние.
Отладчик Visual Studio позволяет контролировать выполнение, то есть вам решать, где приостановить все потоки в процессе и проверить текущее состояние. Вы можете в любой момент прервать все, выполнить шаг с обходом операторов, шаг с заходом и выходом из функций, выполнить до текущей позиции, изменить и продолжить выполнение, а также задать так понравившиеся всем точки останова.
Гибкая проверка состояния
Просматривайте значения переменных во время выполнения.
Как только вы приостановите выполнение приложения, где захотите, Visual Studio предложит множество способов проверить значения переменных для формулирования или проверки гипотезы.
Отслеживайте значение при пошаговом выполнении кода, быстро просматривайте локальные переменные и оценивайте сложные выражения — и все это не выходя из отладчика. Вы даже можете выполнить интерактивный запрос глубоко в структуру данных.
Исключения — это хорошо
Будьте предупреждены о проблемах.
Дефекты кода и неожиданные ситуации проявляют себя в виде исключений. Исключения аварийно завершат работу вашего приложения или просто превратятся в ошибки, которые трудно найти.
При отладке в Visual Studio вы можете настроить условия порождения уведомлений и даже выбрать специальные исключения, которые интересуют вас больше всего. Вы будете предупреждены, и с этого момента все просто — как-будто вы пришли в точку останова.
Простая работа с потоками
Упростите контроль и проверку сложного многопоточного кода.
Просматривайте стеки вызовов всех потоков в одном графическом представлении и оценивайте выражения в нескольких потоках, чтобы сравнить значения. Легко просматривайте информацию о потоках и задачах, помечайте их и замораживайте. Быстро переключайтесь между контекстами выполнения и используйте маркеры потоков, чтобы в любой момент времени видеть, какие строки кода выполняются потоками.
На низком уровне…
Углубляйтесь настолько, насколько этого требует код.
Иногда, особенно для кода C++ системного уровня, необходимо подобраться ближе к аппаратному уровню, чтобы диагностировать тяжело обнаружимые ошибки. Visual Studio позволяет это сделать с помощью окон «Память», «Регистры» и «Дизассемблированный код». Подробнее о поиске утечек памяти с помощью библиотеки CRT.
Предотвращение проблем производительности
Сделайте приложение быстрым и надежным.
Получайте информацию, которая поможет принимать верные решения по производительности при написании кода. Используйте встроенную функцию редактора PerfTips и инструменты диагностики, чтобы при отладке понять качества кода с точки зрения производительности и использования памяти.
Используйте комплексные инструменты профилирования без отладчика, чтобы лучше изучить производительность своего кода, включая использование ЦП, GPU и памяти, скорость отклика пользовательского интерфейса и использование сети. Ознакомьтесь с нашим руководством по средствам профилирования для новичков.
Больше никаких невоспроизводимых ошибок
Журнал выполнения кода .NET.
Изменив код .NET и нажав клавишу F5, чтобы проверить его, вы обнаружили неожиданное поведение, ошибку. Иногда на диагностику такой ошибки уходят часы — вы просматриваете исходный код в поисках связанных фрагментов кода и наугад устанавливаете точки останова.
С помощью инструментов диагностики Visual Studio и IntelliTrace вы можете просматривать журнал выполнения кода и переходить к проверяемому состоянию без каких-либо точек останова.
Простая отладка пользовательского интерфейса
XAML и HTML — это тоже код.
Вы можете настроить оформление приложения на свой вкус, пока оно выполняется. Больше не нужно полагаться на данные времени разработки, чтобы проверить макет.
Для приложений с пользовательским интерфейсом на HTML или XAML проблемы на уровне интерфейса можно выявлять, используя функции отладки кода. Кроме того, Visual Studio позволяет просматривать HTML DOM и визуализировать структуру кода XAML с помощью визуального дерева XAML прямо во время выполнения вашего приложения. Узнайте подробнее о проверке элементов XAML в процессе отладки.
Переходите по коду с помощью отладчика Visual Studio Navigate through code with the Visual Studio debugger
С помощью отладчика Visual Studio можно переходить по коду для проверки состояния приложения и просмотра последовательности выполнения. The Visual Studio debugger can help you navigate through code to inspect the state of an app and show its execution flow. Для быстрого перехода к коду, который необходимо изучить, можно использовать сочетания клавиш, команды отладки, точки останова и другие функции. You can use keyboard shortcuts, debug commands, breakpoints, and other features to quickly get to the code you want to examine. Знание команд навигации и сочетаний клавиш в отладчике ускоряет и упрощает поиск и устранение неполадок в приложениях. Familiarity with debugger navigation commands and shortcuts makes it faster and easier to find and resolve app issues. Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих и статью Методы и инструменты отладки. 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.
Переход в режим приостановки выполнения Get into «break mode»
В режиме приостановки выполнения выполнение приложения приостанавливается, но функции, переменные и объекты при этом остаются в памяти. In break mode, app execution is suspended while functions, variables, and objects remain in memory. Когда отладчик находится в режиме приостановки выполнения, можно переходить по коду. Once the debugger is in break mode, you can navigate through your code. Наиболее распространенные способы быстрого перехода в режим приостановки выполнения: The most common ways to get into break mode quickly is to either:
Начните пошаговое выполнение кода, нажав клавишу F10 или F11. Begin code stepping by pressing F10 or F11. Это позволит быстро найти точку входа в приложение, после чего можно продолжать использовать команды пошагового выполнения для перехода по коду. This allows you to quickly find the entry point of your app, then you can continue pressing step commands to navigate code.
Например, в редакторе кода в Visual Studio можно использовать команду Выполнить до текущей позиции, чтобы запустить приложение, присоединить отладчик и перейти в режим приостановки выполнения, а затем нажать клавишу F11 для перехода по коду. For example, from the code editor in Visual Studio, you can use the Run to Cursor command to start the app, debugger attached, and get into break mode, then F11 to navigate code.
В режиме приостановки выполнения можно переходить по коду, используя различные команды. Once in break mode, you can use a variety of commands to navigate through your code. Во время режима приостановки выполнения можно выполнять поиск ошибок и нарушений целостности данных, проверяя значения переменных. While in break mode, you can examine the values of variables to look for violations or bugs. Для некоторых типов проектов можно также вносить корректировки в приложение. For some project types, you can also make adjustments to the app while in break mode.
Большинство окон отладчика, таких как Модули и Контрольные значения, доступны только тогда, когда отладчик присоединен к приложению. Most debugger windows, like the Modules and Watch windows, are available only while the debugger is attached to your app. Некоторые возможности отладчика, такие как просмотр значений переменных в окне локальных переменных или вычисление выражений в окне контрольных значений, доступны только при приостановке отладчика (то есть в режиме приостановки выполнения). Some debugger features, such as viewing variable values in the Locals window or evaluating expressions in the Watch window, are available only while the debugger is paused (that is, in break mode).
Если во время приостановки выполнения кода не загружены исходные файлы или файлы символов (PDB), отладчик отображает страницу Исходный файл не найден или Символы не найдены, которая поможет найти и загрузить файлы. If you break into code that doesn’t have source or symbol (.pdb) files loaded, the debugger displays a Source Files Not Found or Symbols Not Found page that can help you find and load the files. См. статью Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio. See Specify symbol (.pdb) and source files. Если вы не можете загрузить исходные файлы или файлы символов, можно выполнить отладку инструкций на языке ассемблера в окне Дизассемблирование. If you can’t load the symbol or source files, you can still debug the assembly instructions in the Disassembly window.
Пошаговое прохождение кода Step through code
С помощью команд пошагового выполнения отладчика можно проверять состояние приложения или изучать его последовательность выполнения. The debugger step commands help you inspect your app state or find out more about its execution flow.
Построчное выполнение кода Step into code line by line
Для остановки выполнения на каждом операторе во время отладки используйте команду Отладка > Шаг с заходом или нажмите клавишу F11. To stop on each statement while debugging, use Debug > Step Into, or press F11.
Отладчик осуществляет пошаговое выполнение операторов кода, а не физических строк. The debugger steps through code statements, not physical lines. Например, предложение if может быть записано в одной строке: For example, an if clause can be written on one line:
Однако при пошаговом выполнении этой строки отладчик обрабатывает условие как один шаг, а следствие — как другой. However, when you step into this line, the debugger treats the condition as one step, and the consequence as another. В предыдущем примере условие выполняется. In the preceding example, the condition is true.
При вызове вложенных функций команда Шаг с заходом позволяет попасть в самую глубокую вложенную функцию. On a nested function call, Step Into steps into the most deeply nested function. Например, если использовать Шаг с заходом на вызове Func1(Func2()) , отладчик заходит в функцию Func2 . For example, if you use Step Into on a call like Func1(Func2()) , the debugger steps into the function Func2 .
При выполнении каждой строки кода можно наводить указатель мыши на переменные, чтобы просматривать их значения, или использовать окна Локальные переменные и Контрольные значения для наблюдения за изменением значений. As you execute each line of code, you can hover over variables to see their values, or use the Locals and Watch windows to watch the values change. Кроме того, можно визуально отслеживать стек вызовов при выполнении шагов с заходом в функции. You can also visually trace the call stack while stepping into functions. (Сведения, касающиеся только Visual Studio Enterprise, см. в статье Сопоставление методов в визуализации стека вызовов при отладке.) (For Visual Studio Enterprise only, see Map methods on the call stack while debugging).
Пошаговое прохождение кода и пропуск некоторых функций Step through code and skip some functions
Во время отладки некоторые функции могут вас не интересовать или вы можете знать, что они работают, как в случае с тщательно протестированным кодом библиотеки. You may not care about a function while debugging, or you know it works, like well-tested library code. Чтобы пропустить код во время пошагового выполнения, можно использовать приведенные ниже команды. You can use the following commands to skip code while code stepping. Функции по-прежнему выполняются, но отладчик пропускает их. The functions still execute, but the debugger skips over them.
Команда с клавиатуры Keyboard command | Команда меню «Отладка» Debug menu command | Описание Description |
---|---|---|
F10 F10 | Шаг с обходом Step Over | Если текущая строка содержит вызов функции, команда Шаг с обходом выполняет код, а затем останавливает выполнение в первой строке кода после возврата управления вызываемой функцией. If the current line contains a function call, Step Over runs the code, then suspends execution at the first line of code after the called function returns. |
SHIFT+F11 Shift+F11 | Шаг с выходом Step Out | Команда Шаг с выходом возобновляет выполнение кода и приостанавливает выполнение, когда текущая функция возвращает управление. Step Out continues running code and suspends execution when the current function returns. Отладчик пропускает текущую функцию. The debugger skips through the current function. |
Выполнение до указанного места или функции Run to a specific location or function
Вам может потребоваться выполнить код непосредственно до определенного места или функции, если вы точно знаете, какой код нужно проверить или с какого места следует начать отладку. You may prefer to run directly to a specific location or function when you know exactly what code you want to inspect, or you know where you want to start debugging.
Выполнение до точки останова в коде Run to a breakpoint in code
Чтобы задать простую точку останова в коде, щелкните в левом поле напротив строки кода, в которой нужно приостановить выполнение. To set a simple breakpoint in your code, click the far left margin next to the line of code where you want to suspend execution. Можно также выбрать строку и нажать клавишу F9, выбрать команду Отладка > Переключить точку останова или щелкнуть правой кнопкой мыши и выбрать команду Точка останова > Вставить точку останова. You can also select the line and press F9, select Debug > Toggle Breakpoint, or right-click and select Breakpoint > Insert Breakpoint. Точка останова отображается как красный кружок в левом поле рядом со строкой кода. The breakpoint appears as a red dot in the left margin next to the code line. Отладчик приостанавливает выполнение непосредственно перед выполнением строки. The debugger suspends execution just before the line executes.
Точки останова в Visual Studio предоставляют широкий набор дополнительных функций, таких как условные точки останова и точки трассировки. Breakpoints in Visual Studio provide a rich set of additional functionality, such as conditional breakpoints and tracepoints. Дополнительные сведения см. в статье Использование точек останова. For details, see Using breakpoints.
Выполнение до точки останова функции Run to a function breakpoint
Можно дать отладчику команду на выполнение до тех пор, пока не будет достигнута определенная функция. You can tell the debugger to run until it reaches a specified function. Можно задать функцию по имени или выбрать ее из стека вызовов. You can specify the function by name, or you can choose it from the call stack.
Указание точки останова функции по имени To specify a function breakpoint by name
Выберите команду Отладка > Создать точку останова > Точка останова функции. Select Debug > New Breakpoint > Function Breakpoint
В диалоговом окне Новая точка останова функции введите имя функции и выберите ее язык. In the New Function Breakpoint dialog, type the name of the function and select its language.
Нажмите кнопку ОК. Select OK.
Если функция перегружается или находится в нескольких пространствах имен, нужную функцию можно выбрать в окне Точки останова. If the function is overloaded or in more than one namespace, you can choose the one you want in the Breakpoints window.
Выбор точки останова функции из стека вызовов To select a function breakpoint from the call stack
Во время отладки откройте окно Стек вызовов, выбрав пункт Отладка > Окна > Стек вызовов. While debugging, open the Call Stack window by selecting Debug > Windows > Call Stack.
В окне Стек вызовов щелкните правой кнопкой мыши имя функции и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10. In the Call Stack window, right-click a function and select Run To Cursor, or press Ctrl+F10.
Сведения о визуальном отслеживании стека вызовов см. в статье Сопоставление методов в визуализации стека вызовов при отладке. To visually trace the call stack, see Map methods on the call stack while debugging.
Выполнение до расположения курсора Run to a cursor location
Чтобы выполнить код до позиции курсора, в окне исходного кода или в окне Стек вызовов выберите строку, в которой нужно прервать выполнение, щелкните ее правой кнопкой мыши и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10. To run to the cursor location, in source code or the Call Stack window, select the line you want to break at, right-click and select Run To Cursor, or press Ctrl+F10. Выбор команды Выполнить до текущей позиции аналогичен заданию временной точки останова. Selecting Run To Cursor is like setting a temporary breakpoint.
Выполнение до щелкнутого Run to Click
Во время приостановки работы отладчика можно навести указатель мыши на оператор в исходном коде или в окне Дизассемблирование и щелкнуть значок с зеленой стрелкой Выполнить до этого места. While paused in the debugger, you can hover over a statement in source code or the Disassembly window, and select the Run execution to here green arrow icon. Использование команды Выполнение до щелкнутого позволяет не устанавливать временную точку останова. Using Run to Click eliminates the need to set a temporary breakpoint.
Команда Выполнение до щелкнутого доступна начиная с версии Visual Studio 2017 Visual Studio 2017 . Run to Click is available starting in Visual Studio 2017 Visual Studio 2017 .
Приостановка выполнения кода вручную Manually break into code
Чтобы приостановить выполнение в следующей доступной строке кода в выполняющемся приложении, выберите команду Отладка > Прервать все или нажмите клавиши CTRL+ALT+BREAK. To break in the next available line of code in a running app, select Debug > Break All, or press Ctrl+Alt+Break.
Перемещение указателя для изменения потока выполнения Move the pointer to change the execution flow
Когда работа отладчика приостановлена, желтая стрелка в поле исходного кода или в окне Дизассемблированный код отмечает текущее расположение оператора, который должен быть выполнен следующим. While the debugger is paused, a yellow arrowhead in the margin of the source code or Disassembly window marks the location of the next statement to be executed. Вы можете изменить оператор, который будет выполнен следующим, переместив эту стрелку. You can change the next statement to execute by moving this arrowhead. Можно пропустить часть кода или вернуться к предыдущей строке. You can skip over a portion of code, or return to a previous line. Перемещение указателя полезно при возникновении таких ситуаций, как пропуск раздела кода, содержащего известную ошибку. Moving the pointer is useful for situations such as skipping a section of code that contains a known bug.
Для изменения оператора, который будет выполнен следующим, отладчик должен находиться в режиме приостановки выполнения. To change the next statement to execute, the debugger must be in break mode. В окне исходного кода или окне Дизассемблированный код перетащите желтую стрелку в другую строку или щелкните правой кнопкой мыши строку, которую нужно выполнить следующей, и выберите команду Задать следующий оператор. In the source code or Disassembly window, drag the yellow arrowhead to a different line, or right-click the line you want to execute next and select Set Next Statement.
Счетчик программы переходит непосредственно к новому расположению, и инструкции между старой и новой точками не выполняются. The program counter jumps directly to the new location, and instructions between the old and new execution points aren’t executed. Однако при перемещении точки выполнения обратно промежуточные инструкции не отменяются. However, if you move the execution point backwards, the intervening instructions aren’t undone.
- Перемещение следующего оператора на другую функцию или область обычно приводит к повреждению стека вызова, вызывая ошибку времени выполнения или исключение. Moving the next statement to another function or scope usually results in call-stack corruption, causing a run-time error or exception. При попытке перемещения следующего оператора в другую область, отладчик открывает диалоговое окно с предупреждением и предоставляет возможность отменить операцию. If you try moving the next statement to another scope, the debugger opens a dialog box with a warning and gives you a chance to cancel the operation.
- В Visual Basic нельзя переместить следующий оператор на другую область или функцию. In Visual Basic, you cannot move the next statement to another scope or function.
- Если при использовании машинного кода C++ включены проверки времени выполнения, установка следующего оператора может вызвать исключение, когда выполнение достигнет конца метода. In native C++, if you have run-time checks enabled, setting the next statement can cause an exception to be thrown when execution reaches the end of the method.
- При включенной операции «Изменить и продолжить» команда Задать следующий оператор завершится неудачей, если вы внесете изменения, которые операция «Изменить и продолжить» не сможет немедленно применить. When Edit and Continue is enabled, Set Next Statement fails if you have made edits that Edit and Continue cannot remap immediately. Например, это может произойти, если были внесены изменения внутри блока catch. This can occur, for example, if you have edited code inside a catch block. При возникновении такой ситуации появляется сообщение об ошибке, указывающее, что операция не поддерживается. When this happens, an error message tells you that the operation is not supported.
- В управляемом коде нельзя перемещать следующий оператор в следующих случаях: In managed code, you cannot move the next statement if:
- Следующий оператор находится в методе, отличном от метода текущего оператора. The next statement is in a different method than the current statement.
- Отладка была запущена через JIT–отладку. Debugging was started by Just-In-Time debugging.
- Выполняется очистка стека вызова. A call stack unwind is in progress.
- Вызвано исключение System.StackOverflowException или System.Threading.ThreadAbortException. A System.StackOverflowException or System.Threading.ThreadAbortException exception has been thrown.
Отладка кода, не являющегося пользовательским Debug non-user code
По умолчанию отладчик пытается выполнить отладку только кода вашего приложения, так как включена функция Только мой код. By default, the debugger tries to debug only your app code by enabling a setting called Just My Code. Дополнительные сведения о том, как эта функция работает с проектами различных типов и на разных языках, а также о том, как настроить ее, см. в статье Только мой код. For more details about how this feature works for different project types and languages, and how you can customize it, see Just My Code.
Для просмотра кода платформы, кода сторонней библиотеки или системных вызовов во время отладки можно отключить функцию «Только мой код». To look at framework code, third-party library code, or system calls while debugging, you can disable Just My Code. В меню Сервис (или Отладка) выберите пункты Параметры > Отладка и снимите флажок Включить только мой код. In Tools (or Debug) > Options > Debugging, clear the Enable Just My Code check box. Когда функция «Только мой код» отключена, в окнах отладчика отображается код, не являющийся пользовательским, и отладчик может выполнять его по шагам. When Just My Code is disabled, non-user code appears in the debugger windows, and the debugger can step into the non-user code.
Режим «Только мой код» не поддерживается для проектов устройств. Just My Code is not supported for device projects.
Отладка системного кода Debug system code
Если вы загрузили отладочные символы для системного кода Майкрософт и отключили режим «Только мой код», можно производить шаг с заходом в системный вызов так же, как в любой другой вызов. If you have loaded debugging symbols for Microsoft system code, and disabled Just My Code, you can step into a system call just as you can any other call.
Чтобы загрузить символы для определенного системного компонента, выполните указанные ниже действия. To load symbols for a specific system component:
Во время отладки откройте окно Модули, выбрав пункт Отладка > Окна > Модули или нажав клавиши CTRL+ALT+U. While you’re debugging, open the Modules window by selecting Debug > Windows > Modules, or pressing Ctrl+Alt+U.
Определить, для каких модулей символы загружены, можно по значению в столбце Состояние символов в окне Модули. In the Modules window, you can tell which modules have symbols loaded in the Symbol Status column. Щелкните правой кнопкой мыши модуль, для которого требуется загрузить символы, и выберите команду Загрузить символы. Right-click the module that you want to load symbols for, and select Load Symbols.
Шаг с заходом в свойства и операторы в управляемом коде Step into properties and operators in managed code
По умолчанию отладчик обходит свойства и операторы при пошаговом выполнении в управляемом коде. The debugger steps over properties and operators in managed code by default. В большинстве случаев это делает отладку более удобной и эффективной. In most cases, this provides a better debugging experience. Чтобы включить пошаговое выполнение свойств и операторов, выберите пункт Отладка > Параметры. To enable stepping into properties or operators, choose Debug > Options. На странице Отладка > Общие снимите флажок Обход свойств и операторов (только управляемый код) . On the Debugging > General page, clear the Step over properties and operators (Managed only) check box.