Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
С помощью окна стек вызовов можно просмотреть вызовы функции или процедуры, которые сейчас находятся в стеке. В окне стека вызовов показан порядок вызова методов и функций. Стек вызовов — это хороший способ изучить и понять поток выполнения приложения.
Если символы отладки недоступны для части стека вызовов, окно стека вызовов может не отображать правильные сведения для этой части стека вызовов, отображая вместо этого:
[Frames below may be incorrect and/or missing, no symbols loaded for name.dll]
Заметка
Отображаемые диалоговые окна и команды меню могут отличаться от описанных здесь в зависимости от активных параметров или выпуска. Чтобы изменить параметры, выберите Параметры импорта и экспорта в меню инструментов. См. Сброс всех параметров. Окно стек вызовов похоже на вид отладки в некоторых средах разработки, таких как Eclipse.
Просмотр стека вызовов в отладчике
При отладке в меню отладки выберите Windows > стек вызовов или нажмите клавишу ctrl+alt+C.
Заметка
Параметр меню "Отладка > стека вызовов Windows" > доступен только во время активного сеанса отладки. Сначала запустите отладку (например, нажав клавишу F5 или выбрав Отладка > Начать отладку), а затем приостановите выполнение в точке останова перед открытием окна стека вызовов.
Стрелка определяет кадр стека, на котором находится указатель выполнения. По умолчанию эти данные кадра стека отображаются в исходном коде, локальные, автозапуска, контрольныеи дизассембли окнах. Чтобы изменить контекст отладчика на другой кадр в стеке, переключиться на другой кадр стека.
Стрелка указывает на кадр стека, где в настоящее время расположен указатель выполнения. По умолчанию эти данные кадра стека отображаются в исходном коде, локальные, автозапуска, контрольныеи дизассембли окнах. Чтобы изменить контекст отладчика на другой кадр в стеке, переключиться на другой кадр стека.
Вы также можете просматривать кадры исключений в стеке вызовов во время отладки. Дополнительные сведения см. в разделе Просмотр стека вызовов в средствепомощи при исключениях.
Анализ стека вызовов с помощью Copilot
Вы можете получить анализ текущего состояния отладки, проводимый с использованием ИИ, в контексте окна стека вызовов. Эта функция помогает ответить на вопрос: что мой поток или приложение делают прямо сейчас? При нажатии кнопки "Анализ с помощью Copilot" текущее состояние отладки отправляется в Copilot, открывая окно чата с анализом состояния приложения, и нет необходимости вручную описывать контекст отладки.
Прежде чем использовать эту функцию, убедитесь, что Copilot включен и приложение приостановлено в отладчике.
Чтобы проанализировать стек вызовов, выполните следующие действия.
- Когда Copilot определяет проблему стека вызовов, например, кадр, ожидающий асинхронной задачи, или если выполнение завершается сбоем во время асинхронных операций, Copilot показывает кнопку "Анализ с помощью Copilot" рядом с соответствующим кадром в окне "Стек вызовов".
- Выберите "Анализ с помощью Copilot".
Copilot анализирует и синхронные, и асинхронные стеки вызовов, а также добавляет аннотации в соответствующие кадры. Вы можете проанализировать кадр, чтобы получить четкое объяснение:
- Почему выполнение приостановлено
- На чем ждёт поток
- Как выполнение дошло до текущей точки
Благодаря этому из статического списка фреймов стек вызовов превращается в интерактивный инструмент для отладки. Вместо того, чтобы вручную воссоздавать асинхронные потоки, Copilot помогает быстро выполнить анализ поведения среды выполнения и вернуться к работе над устранением реальной проблемы.
Дополнительные сведения об отладке с помощью Copilot см. в статье Отладка приложения с помощью GitHub Copilot.
Отображение кода, отличного от пользователя, в окне "Стек вызовов"
Чтобы отобразить внешний или непользовательский код, нажмите кнопку "Показать внешний код" на панели инструментов стека вызовов или щелкните правой кнопкой мыши в окне " Стек вызовов" и выберите "Показать внешний код".
Код, не относящийся к пользовательскому, — это любой код, который не отображается при включении функции Just My Code. В управляемом коде кадры, не относящиеся к пользовательскому коду, скрыты по умолчанию. Следующая нотация отображается вместо фреймов, содержащих код, не относящийся к пользователю:
[<External Code>]
Отображение внешнего кода при необходимости понимания переходов между кодом и платформой или кодом среды выполнения, например:
- трассировка, где исключение пересекает границы фреймворка
- понимание путей обратного вызова и путей диспетчеризации событий
- определение того, где элемент управления возвращается из кода библиотеки в ваш код
Переключение на другой кадр стека (изменение контекста отладчика)
Переключение стековых кадров полезно, если требуется проверить данные локальных переменных, аргументы функций, и исходный код для более раннего вызова, без изменения текущей точки выполнения.
В окне стек вызовов щелкните правой кнопкой мыши на кадре стека, чей код и данные требуется просмотреть.
Кроме того, можно дважды щелкнуть кадр в окне стек вызовов, чтобы переключиться на этот кадр.
Выберите , чтобы переключиться на кадр.
Зеленая стрелка с фигурным хвостом отображается рядом с выбранным кадром стека. Указатель выполнения остается в исходном кадре, который по-прежнему отмечен желтой стрелкой. Если выбрать шагили продолжить в меню Отладка, выполнение будет продолжаться в исходном кадре, а не в выбранном кадре.
Просмотр всех связанных тем
Переключите кнопку "Просмотреть все потоки" , чтобы просмотреть все связанные потоки в окне Parallel Stack. Окно Parallel Stacks визуализирует стеки вызовов для многопоточных приложений.
Используйте это представление, когда точка останова может повлиять на работу с другими потоками, такими как блокировки, асинхронные продолжения или обратные вызовы пула потоков.
Поиск стека вызовов
Кадры стека вызовов можно найти, введя термины в поле поиска в верхнем левом углу окна Call Stack.
Поиск полезен для быстрого поиска метода, модуля или пространства имен в глубоких стеках. Выделенные соответствующие кадры позволяют быстрее перейти к нужным частям стека.
Просмотр исходного кода функции в стеке вызовов
В окне стек вызовов щелкните правой кнопкой мыши функцию, исходный код которой вы хотите просмотреть и выберите Перейти к исходному коду.
Выполнить переход к определенной функции из окна стека вызовов
В окне стека вызовов выберите функцию, щелкните правой кнопкой мыши и выберите Запуск до курсора.
Используйте эту команду, если вы хотите быстро перейти к известному кадру без пошагового выполнения каждого промежуточного вызова.
Установите точку останова на момент выхода из вызова функции
См. раздел Установите точку останова в функции стека вызовов.
Отображение вызовов к другому потоку или из другого потока
Щелкните правой кнопкой мыши окно стека вызовов: выберите Включить вызовы в/из других потоков.
Для выявления межпоточных связей используйте этот параметр при диагностике передачи управления между рабочими потоками, потоками пользовательского интерфейса или продолжениями задач.
Визуально проследите стек вызовов
В Visual Studio Enterprise (только) можно просматривать карты кода для стека вызовов во время отладки.
В окне стека вызовов откройте контекстное меню. Выберите показать стек вызовов на карте кода (CTRL + SHIFT + `).
Дополнительные сведения см. в разделе Методы Сопоставления в стеке вызовов при отладке.
Просмотр кода дизассембли для функции в стеке вызовов (C#, C++, Visual Basic, F#)
В окне стека вызовов нажмите правой кнопкой мыши функцию, чей код дизассемблирования вы хотите увидеть, затем выберите перейти к дизассемблированию.
Изменение отображаемых необязательных сведений
Щелкните правой кнопкой мыши окно стека вызовов и установите или снимите флажок Показать <нужные> сведения.
Используйте эти варианты для настройки сведений о фрейме, чтобы стек выделял информацию, которая важна для вас во время расследования.
Автоматическая декомпиляция внешнего кода .NET
Начиная с Visual Studio 2022 версии 17.7, можно автокомпилировать код .NET, дважды щелкнув внешний код в окне стека вызовов. Дополнительные сведения см. в статье Создание исходного кода из сборок .NET при отладке.
Загрузка символов для модуля (C#, C++, Visual Basic, F#)
В окне стека вызовов вы можете загрузить символы отладки для кода, для которого в настоящее время символы не загружены. Эти символы могут быть символами .NET или системными символами, скачанными с общедоступных серверов символов Майкрософт, или символами в путе символов на компьютере, где выполняется отладка.
См. Укажите символы (.pdb) и файлы исходного кода.
Загрузка символов
В окне "Стек вызовов" щелкните правой кнопкой мыши на кадре стека, для которого не загружены символы. Рамка будет затемнена.
Наведите указатель на Загрузить символы, а затем выберите Серверы символов Microsoft (при наличии) или перейдите по пути к символам.
Установить путь к символам
В окне стека вызовов выберите параметры символов в контекстном меню.
Откроется диалоговое окно параметров и откроется страница символов.
Выберите параметры символов .
В диалоговом окне «Параметры» щелкните значок папки.
В поле расположений файла символов (.pdb) появится курсор.
Введите путь к каталогу, где находятся символы на компьютере, на котором осуществляется отладка. Для локальной и удаленной отладки это путь на локальном компьютере.
Нажмите ОК, чтобы закрыть диалоговое окно "Параметры".