Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Окно параллельных стеков полезно для отладки многопоточных приложений. В нем есть несколько представлений:
- В представлении потоков отображаются сведения о стеке вызовов всех потоков в приложении. Вы можете переключаться между потоками и кадрами стека в этих потоках.
-
в окне «Задачи» отображается информация о стеке вызовов, ориентированной на задачи.
- Для приложений .NET, использующих шаблон async/await, представление "Задачи" является наиболее полезным для отладки. Пошаговое руководство по отладке асинхронного приложения.
- ** Для приложений, использующих библиотеку параллельных задач (TPL), но не асинхронный шаблон async/await, или для приложений C++ с использованием Библиотеки параллельных вычислений, вид потоки в окне Параллельные стеки является наиболее полезным инструментом для отладки.
-
в окне «Задачи» отображается информация о стеке вызовов, ориентированной на задачи.
- Для приложений .NET, использующих шаблон async/await, представление "Задачи" является наиболее полезным для отладки.
- ** Для приложений, использующих библиотеку параллельных задач (TPL), но не асинхронный шаблон async/await, или для приложений C++ с использованием Библиотеки параллельных вычислений, вид потоки в окне Параллельные стеки является наиболее полезным инструментом для отладки.
- Метод Просмотр центрирует стек вызовов на выбранном методе.
Использование окна Параллельных стеков
Чтобы открыть окно параллельных стеков, необходимо находиться в сеансе отладки. Выберите Отладка>Windows>Параллельные стеки.
Элементы управления панели инструментов
В окне параллельных стеков есть следующие элементы управления панелью инструментов:
| Икона | Контроль | Описание |
|---|---|---|
|
комбинированный список потоков/задач | Переключает представление между стеками вызовов потоков и стеками вызовов задач. Дополнительные сведения см. в представлении задач и представлении потокови. |
|
Показать только помеченные | Отображает стеки вызовов только для потоков, помеченных в других окнах отладчика, таких как окно потоков GPU и окно параллельных часов. |
значок переключения представления метода ![]() |
Переключение представления метода | Переключается между представлениями стека вызовов и представлением метода . Для получения дополнительной информации см. представление метода. |
|
Автоматическая прокрутка до текущего кадра стека | Автоматически прокручивает график, чтобы текущий кадр стека становился видимым. Эта функция полезна при изменении текущего кадра стека из других окон или при достижении новой точки останова в больших графах. |
|
Переключатель управления масштабированием | Отображает или скрывает элемент управления масштабированием слева от окна. Независимо от видимости элемента управления масштабированием, вы также можете увеличить масштаб, нажав клавиши CTRL и щелкнув колесико мыши или нажав клавиши CTRL+SHIFT++, чтобы увеличить масштаб и CTRL+SHIFT+- уменьшить масштаб. |
| Икона | Контроль | Описание |
|---|---|---|
|
комбинированный список потоков/задач | Переключает представление между стеками вызовов потоков и стеками вызовов задач. Дополнительные сведения см. в представлении задач и представлении потокови. |
Значок фильтра ![]() |
Контроль фильтра | Отображает стеки вызовов только для определенного набора потоков, которые вас интересуют. |
|
Показать только помеченные | Отображает стеки вызовов только для потоков, помеченных в других окнах отладчика, таких как окно потоков GPU и окно параллельных часов. |
значок переключения представления метода ![]() |
Переключение представления метода | Переключается между представлениями стека вызовов и представлением метода . Для получения дополнительной информации см. представление метода. |
|
Автоматическая прокрутка до текущего кадра стека | Автоматически прокручивает график, чтобы текущий кадр стека становился видимым. Эта функция полезна при изменении текущего кадра стека из других окон или при достижении новой точки останова в больших графах. |
|
Переключатель управления масштабированием | Отображает или скрывает элемент управления масштабированием слева от окна. Независимо от видимости элемента управления масштабированием, вы также можете увеличить масштаб, нажав клавиши CTRL и щелкнув колесико мыши или нажав клавиши CTRL+SHIFT++, чтобы увеличить масштаб и CTRL+SHIFT+- уменьшить масштаб. |
|
Элемент управления поиском | С помощью этой функции можно легко искать кадры стека, а затем использовать стрелки для перехода между этими результатами. |
значок ![]() |
Сохранить настройки управления | Позволяет сохранять и экспортировать содержимое из параллельного окна стека в виде изображения. |
|
Показать внешний контроль кода | С помощью этой функции можно отображать и скрывать стеки из внешних кодов и библиотек. |
значок копилота ![]() |
Обобщение стека вызовов | Начиная с Visual Studio 2022 версии 17.13 (предварительная версия 4), вы можете выбрать Суммировать, когда Copilot установлен и активирован. Эта кнопка открывает окно чата Copilot, предварительно загруженное с соответствующим контекстом потока, что позволяет просматривать сведения, включая состояния потоков, вызовы функций и предлагаемые исправления. |
Значки кадра стека
Следующие значки содержат сведения о активных и текущих кадрах стека во всех представлениях:
| Икона | Описание |
|---|---|
|
|
Указывает текущее расположение (активный кадр стека) текущего потока. |
|
|
Указывает текущее местоположение (активный кадр стека) неактивного потока. |
|
|
Указывает текущий кадр стека (текущий контекст отладчика). Имя метода полужирное, где бы оно ни отображалось. |
| Икона | Описание |
|---|---|
|
|
Указывает текущее расположение (активный кадр стека) текущего потока. |
|
|
Показывает текущее местоположение (активный кадр стека) неактивного потока. |
|
|
Указывает текущий кадр стека (текущий контекст отладчика). Имя метода полужирное, где бы оно ни отображалось. |
|
|
(.NET) Указывает, что текущий кадр стека имеет предупреждение о критическом состоянии, например Взаимоблокировка. |
|
|
(.NET) Указывает взаимоблокируемый узел. |
| Статусная информация |
(.NET) Указывает, что текущий кадр стека содержит дополнительные сведения, такие как ожидание, ожидание блокировки, владение и т. д. |
|
|
(.NET) Указывает, что текущая задача находится в состоянии блокировки или ожидания и т. д. |
|
|
Указывает выполняемую в данный момент задачу. |
Пункты контекстного меню
Следующие пункты контекстного меню доступны при щелчке правой кнопкой мыши на методе в представлении потоков или в представлении задач . Шесть последних предметов такие же, как в окне стека вызовов .
| Элемент меню | Описание |
|---|---|
| флаг | Помечает выбранный элемент. |
| снять флажок | Снимает флаг с выбранного элемента. |
| замораживание | Заморозка выбранного элемента. |
| оттепель | Оттаивает выбранный элемент. |
| Переключитесь на кадр | Так же, как и соответствующая команда меню в окне стек вызовов. Однако в окне Параллельных стеков один метод может находиться в нескольких кадрах. Вы можете выбрать кадр, который требуется в подменю для этого элемента. Если один из кадров стека находится в текущем потоке, этот кадр выбирается по умолчанию в подменю. |
| Перейти к задаче или Перейти к потоку | Переключается на задачи или потоки представления и сохраняет тот же кадр стека. |
| перейти к исходному коду | Переходит в соответствующее место в окне исходного кода. |
| перейти на разборку | Переходит в соответствующее расположение в окне дизассемблера. |
| показать внешний код | Отображает или скрывает внешний код. |
| шестнадцатеричный дисплей | Переключение между десятичным и шестнадцатеричным отображением. |
| отобразить потоки в исходном коде | Помечает расположение потока в окне исходного кода. |
| сведения о загрузке символов | Открывает диалоговое окно Сведения о Загрузке Символов. |
| Параметры символов | Открывает диалоговое окно "Параметры символов". |
| Элемент меню | Описание |
|---|---|
| Копировать | Скопируйте выбранный элемент. |
| выберите все кадры ниже | Выбирает все кадры в выбранном стеке. |
| флаг | Помечает выбранный элемент. |
| снять флажок | Снимает флаг с выбранного элемента. |
| замораживание | Заморозка выбранного элемента. |
| оттепель | Оттаивает выбранный элемент. |
| Переключитесь на кадр | Так же, как и соответствующая команда меню в окне стек вызовов. Однако в окне Параллельных стеков один метод может находиться в нескольких кадрах. Вы можете выбрать кадр, который требуется в подменю для этого элемента. Если один из кадров стека находится в текущем потоке, этот кадр выбирается по умолчанию в подменю. |
| Перейти к задаче или Перейти к потоку | Переключается на задачи или потоки представления и сохраняет тот же кадр стека. |
| перейти к исходному коду | Переходит в соответствующее место в окне исходного кода. |
| перейти на разборку | Переходит в соответствующее расположение в окне дизассемблера. |
| показать внешний код | Отображает или скрывает внешний код. |
| шестнадцатеричный дисплей | Переключение между десятичным и шестнадцатеричным отображением. |
| отобразить потоки в исходном коде | Помечает расположение потока в окне исходного кода. |
| сведения о загрузке символов | Открывает диалоговое окно Сведения о Загрузке Символов. |
| Параметры символов | Открывает диалоговое окно "Параметры символов". |
Просмотр потоков
В представлении потоки кадр стека и путь вызова текущего потока выделены синим цветом. Текущее расположение потока отображается желтой стрелкой.
Чтобы изменить текущий кадр стека, дважды щелкните другой метод. Это также может переключить текущий поток в зависимости от того, является ли выбранный метод частью текущего потока или другого потока.
Когда граф представления потоков слишком велик, чтобы поместиться в окно, в окне появляется элемент управления "Общий вид". В области управления можно переместить рамку, чтобы перейти к различным частям графа.
На следующем рисунке показан главный поток в переходе от управляемого кода к машинному коду. Пять потоков находятся в текущем методе. Четыре потока продолжают выполняться в контексте метода S.C, в то время как один рабочий поток продолжает переход с управляемого к родному коду, устанавливая имя на рабочем потоке.
В следующей таблице описаны основные характеристики представления потоков.
| Выноска | Имя элемента | Описание |
|---|---|---|
| 1 | Сегмент стека вызовов или узел | Содержит набор методов для единого или нескольких потоков. Если кадр не имеет стрелочных линий, подсоединённых к нему, кадр показывает весь путь вызова для потока(ов). |
| 2 | Синее выделение | Указывает путь вызова текущего потока. |
| 3 | Линии со стрелками | Подключите узлы, чтобы составить общий путь вызова для потока(ов). |
| 4 | Заголовок узла | Показывает количество процессов и потоков, имени потока и идентификатора потока для узла. |
| 5 | Метод | Представляет один или несколько фреймов стека в одном методе. |
| 6 | Подсказка по методу | Отображается при наведении указателя мыши на метод. В представлении Потоков, подсказка отображает все потоки в таблице, аналогично окну Потоков. |
| 7 | Описание потока | Созданное ИИ описание потока. Начиная с Visual Studio 2022 версии 17.13 preview 1, это описание присутствует при установке и активации Copilot. |
Получение помощи по искусственному интеллекту
Если у вас есть Copilot, вы можете получить помощь по искусственному интеллекту в представлении "Потоки" с описаниями потока, созданными ИИ, и с помощью кнопки Generate Insights . С Кнопка взаимодействовать с Copilot о данных потока, которые вы видите.Screenshot of Generate Insights button. В этом сценарии Copilot уже знает контекст вашего вопроса, поэтому вам не нужно предоставлять контекст в чате. Дополнительные сведения см. в разделе Отладка с помощью Copilot.
Чтобы включить или отключить краткие описания потоков, откройте панель "
Чтобы включить или отключить краткое описание потоков, откройте диалоговое окно"Параметры>" и разверните раздел GitHub>Copilot. В категории "Отладчик" и "Диагностика " установите или снимите флажок "Включить сводку ИИ" в окне параллельных стеков .
На следующем рисунке показан один поток, который выполняет переход от Main к переходу из управляемого кода в нативный код. Шесть потоков находятся в текущем методе. Два потока переходят в состояние Thread.Sleep, а два продолжают выполнение Console.WriteLine, а текущий поток переходит к SyncTextWriter.WriteLine.
В следующей таблице описаны основные характеристики представления потоков.
| Выноска | Имя элемента | Описание |
|---|---|---|
| 1 | Сегмент стека вызовов или узел | Содержит набор методов для единого или нескольких потоков. Если кадр не имеет стрелочных линий, подсоединённых к нему, кадр показывает весь путь вызова для потока(ов). |
| 2 | Синее выделение | Указывает путь вызова текущего потока. |
| 3 | Линии со стрелками | Подключите узлы, чтобы составить общий путь вызова для потока(ов). |
| 4 | Заголовок узла | Показывает количество процессов и потоков для узла. |
| 5 | Метод | Представляет один или несколько фреймов стека в одном методе. |
| 6 | Подсказка по методу | Отображается при наведении указателя мыши на метод. В представлении Потоков, подсказка отображает все потоки в таблице, аналогично окну Потоков. |
Просмотр задач
Для приложений .NET, использующих шаблон async/await, представление "Задачи" является наиболее полезным для отладки. Пошаговое руководство по отладке асинхронного приложения.
В представлении "Задачи " можно:
- Просмотр визуализаций стека вызовов для приложений, использующих шаблон async/await.
- Определите асинхронный код, который планируется запустить, но еще не запущен.
На следующем рисунке показано представление потоков вверху и соответствующее представление задач внизу.
Наведите указатель мыши на метод, чтобы отобразить подсказку с дополнительными сведениями. В представлении задач подсказка отображает все задачи в таблице, аналогичной окну задач .
На следующем рисунке показана подсказка для метода в представлении потоков наверху и в соответствующем представлении Задач внизу.
Вид метода
В представлении Потоки или Задачи можно свести диаграмму к текущему методу, выбрав значок Включение/Выключение представления метода на панели инструментов. В представлении методов отображены все методы во всех потоках, которые либо вызывают текущий метод, либо вызываются им. На следующем рисунке показано, как те же сведения выглядят в представлении Потоков слева и в представлении методов справа.
Если вы переключитесь на новый кадр стека, этот метод станет текущим, и на панели Метода будут отображаться все вызывающие и вызываемые процедуры для нового метода. Этот сценарий может привести к тому, что некоторые потоки будут отображаться или исчезать из вида, в зависимости от наличия этого метода в их стеках вызовов. Чтобы вернуться к представлению стека вызовов, снова выберите значок представления метода панели инструментов.
Видеоурок по отладке потоков и задач с использованием параллельных стеков
В этих видео учебниках показано, как использовать представления потоков и задач окна Параллельных стеков в Visual Studio 2022 для отладки многопоточных приложений.
- задачи отладки с помощью окна Параллельных стеков
- Отладка потоков с помощью окна параллельных стеков




