Поделиться через


Просмотр потоков и задач в окне Параллельных стеков (C#, Visual Basic, C++)

Окно параллельных стеков полезно для отладки многопоточных приложений. В нем есть несколько представлений:

Использование окна Параллельных стеков

Чтобы открыть окно параллельных стеков, необходимо находиться в сеансе отладки. Выберите Отладка>Windows>Параллельные стеки.

Элементы управления панели инструментов

В окне параллельных стеков есть следующие элементы управления панелью инструментов:

снимок экрана панели инструментов в окне Параллельных стеков.

Икона Контроль Описание
поле со списком комбинированный список потоков/задач Переключает представление между стеками вызовов потоков и стеками вызовов задач. Дополнительные сведения см. в представлении задач и представлении потокови.
значок Показать только помеченные Отображает стеки вызовов только для потоков, помеченных в других окнах отладчика, таких как окно потоков GPU и окно параллельных часов.
значок переключения представления метода значок переключения представления метода Переключение представления метода Переключается между представлениями стека вызовов и представлением метода . Для получения дополнительной информации см. представление метода.
автопрокрутка к текущему значку Автоматическая прокрутка до текущего кадра стека Автоматически прокручивает график, чтобы текущий кадр стека становился видимым. Эта функция полезна при изменении текущего кадра стека из других окон или при достижении новой точки останова в больших графах.
значок переключателя масштабирования Переключатель управления масштабированием Отображает или скрывает элемент управления масштабированием слева от окна.

Независимо от видимости элемента управления масштабированием, вы также можете увеличить масштаб, нажав клавиши CTRL и щелкнув колесико мыши или нажав клавиши CTRL+SHIFT++, чтобы увеличить масштаб и CTRL+SHIFT+- уменьшить масштаб.

снимок экрана панели инструментов в окне Parallel Stacks 2022.

Икона Контроль Описание
поле со списком комбинированный список потоков/задач Переключает представление между стеками вызовов потоков и стеками вызовов задач. Дополнительные сведения см. в представлении задач и представлении потокови.
Значок фильтра Контроль фильтра Отображает стеки вызовов только для определенного набора потоков, которые вас интересуют.
значок Показать только помеченные Отображает стеки вызовов только для потоков, помеченных в других окнах отладчика, таких как окно потоков GPU и окно параллельных часов.
значок переключения представления метода значок переключения представления метода Переключение представления метода Переключается между представлениями стека вызовов и представлением метода . Для получения дополнительной информации см. представление метода.
автопрокрутка к текущему значку Автоматическая прокрутка до текущего кадра стека Автоматически прокручивает график, чтобы текущий кадр стека становился видимым. Эта функция полезна при изменении текущего кадра стека из других окон или при достижении новой точки останова в больших графах.
значок переключателя масштабирования Переключатель управления масштабированием Отображает или скрывает элемент управления масштабированием слева от окна.

Независимо от видимости элемента управления масштабированием, вы также можете увеличить масштаб, нажав клавиши CTRL и щелкнув колесико мыши или нажав клавиши CTRL+SHIFT++, чтобы увеличить масштаб и CTRL+SHIFT+- уменьшить масштаб.
значок поиска Элемент управления поиском С помощью этой функции можно легко искать кадры стека, а затем использовать стрелки для перехода между этими результатами.
значок Сохранить настройки управления Позволяет сохранять и экспортировать содержимое из параллельного окна стека в виде изображения.
значок внешнего кода Показать внешний контроль кода С помощью этой функции можно отображать и скрывать стеки из внешних кодов и библиотек.
значок копилота значок Сводка Обобщение стека вызовов Начиная с Visual Studio 2022 версии 17.13 (предварительная версия 4), вы можете выбрать Суммировать, когда Copilot установлен и активирован. Эта кнопка открывает окно чата Copilot, предварительно загруженное с соответствующим контекстом потока, что позволяет просматривать сведения, включая состояния потоков, вызовы функций и предлагаемые исправления.

Значки кадра стека

Следующие значки содержат сведения о активных и текущих кадрах стека во всех представлениях:

Икона Описание
желтая стрелка Указывает текущее расположение (активный кадр стека) текущего потока.
значок потоков Указывает текущее расположение (активный кадр стека) неактивного потока.
зеленая стрелка Указывает текущий кадр стека (текущий контекст отладчика). Имя метода полужирное, где бы оно ни отображалось.
Икона Описание
желтая стрелка Указывает текущее расположение (активный кадр стека) текущего потока.
значок потоков Указывает текущее расположение (активный кадр стека) неактивного потока.
зеленая стрелка Указывает текущий кадр стека (текущий контекст отладчика). Имя метода полужирное, где бы оно ни отображалось.
ошибка состояния Указывает, что текущий кадр стека имеет предупреждение о критическом состоянии, например Взаимоблокировка.
исключенный статус Указывает взаимоблокируемый узел.
Статусная информация Указывает, что текущий кадр стека содержит дополнительные сведения, такие как ожидание, ожидание блокировки, владение и т. д.
Статус заблокирован Указывает, что текущая задача находится в состоянии блокировки или ожидания и т. д.
состояние выполнения Указывает выполняемую в данный момент задачу.

Пункты контекстного меню

Следующие пункты контекстного меню доступны при щелчке правой кнопкой мыши на методе в представлении потоков или в представлении задач . Шесть последних предметов такие же, как в окне стека вызовов .

снимок экрана контекстного меню в окне Параллельных стеков.

Элемент меню Описание
флаг Помечает выбранный элемент.
снять флажок Снимает флаг с выбранного элемента.
замораживание Заморозка выбранного элемента.
оттепель Оттаивает выбранный элемент.
Переключитесь на кадр Так же, как и соответствующая команда меню в окне стек вызовов. Однако в окне Параллельные стеки один метод может находиться в нескольких кадрах. Вы можете выбрать кадр, который требуется в подменю для этого элемента. Если один из кадров стека находится в текущем потоке, этот кадр выбирается по умолчанию в подменю.
Перейти к задаче или Перейти к потоку Переключается на задачи или потоки представления и сохраняет тот же кадр стека.
перейти к исходному коду Переходит в соответствующее место в окне исходного кода.
перейти на разборку Переходит в соответствующее расположение в окне дизассемблера.
показать внешний код Отображает или скрывает внешний код.
шестнадцатеричный дисплей Переключение между десятичным и шестнадцатеричным отображением.
отобразить потоки в исходном коде Помечает расположение потока в окне исходного кода.
сведения о загрузке символов Открывает диалоговое окно Сведения о Загрузке Символов.
Параметры символов Открывает диалоговое окно "Параметры символов".

снимок экрана контекстного меню в окне Parallel Stacks 2022.

Элемент меню Описание
Копировать Скопируйте выбранный элемент.
выберите все кадры ниже Выбирает все кадры в выбранном стеке.
флаг Помечает выбранный элемент.
снять флажок Снимает флаг с выбранного элемента.
замораживание Заморозка выбранного элемента.
оттепель Оттаивает выбранный элемент.
Переключитесь на кадр Так же, как и соответствующая команда меню в окне стек вызовов. Однако в окне Параллельные стеки один метод может находиться в нескольких кадрах. Вы можете выбрать кадр, который требуется в подменю для этого элемента. Если один из кадров стека находится в текущем потоке, этот кадр выбирается по умолчанию в подменю.
Перейти к задаче или Перейти к потоку Переключается на задачи или потоки представления и сохраняет тот же кадр стека.
перейти к исходному коду Переходит в соответствующее место в окне исходного кода.
перейти на разборку Переходит в соответствующее расположение в окне дизассемблера.
показать внешний код Отображает или скрывает внешний код.
шестнадцатеричный дисплей Переключение между десятичным и шестнадцатеричным отображением.
отобразить потоки в исходном коде Помечает расположение потока в окне исходного кода.
сведения о загрузке символов Открывает диалоговое окно Сведения о Загрузке Символов.
Параметры символов Открывает диалоговое окно "Параметры символов".

Просмотр потоков

В представлении потоки кадр стека и путь вызова текущего потока выделены синим цветом. Текущее расположение потока отображается желтой стрелкой.

Чтобы изменить текущий кадр стека, дважды щелкните другой метод. Это также может переключить текущий поток в зависимости от того, является ли выбранный метод частью текущего потока или другого потока.

Когда граф представления потоков слишком велик, чтобы поместиться в окно, в окне появляется элемент управления "Общий вид". В области управления можно переместить рамку, чтобы перейти к различным частям графа.

На следующем рисунке показан один поток, который выполняет переход от Main к переходу из управляемого кода в нативный код. Шесть потоков находятся в текущем методе. Два потока переходят в состояние Thread.Sleep, а два продолжают выполнение Console.WriteLine, а текущий поток переходит к SyncTextWriter.WriteLine.

снимок экрана представления потоков в окне Параллельных стеков.

В следующей таблице описаны основные характеристики представления потоков.

Выноска Имя элемента Описание
1 Сегмент стека вызовов или узел Содержит набор методов для единого или нескольких потоков. Если кадр не имеет стрелочных линий, подсоединённых к нему, кадр показывает весь путь вызова для потока(ов).
2 Синее выделение Указывает путь вызова текущего потока.
3 Линии со стрелками Подключите узлы, чтобы составить общий путь вызова для потока(ов).
4 Заголовок узла Показывает количество процессов и потоков для узла.
5 Метод Представляет один или несколько фреймов стека в одном методе.
6 Подсказка по методу Отображается при наведении указателя мыши на метод. В представлении Потоков, подсказка отображает все потоки в таблице, аналогично окну Потоков.

На следующем рисунке показан главный поток в переходе от управляемого кода к машинному коду. Пять потоков находятся в текущем методе. Четыре потока продолжают выполняться в контексте метода S.C, в то время как один рабочий поток продолжает переход с управляемого к родному коду, устанавливая имя на рабочем потоке.

снимок экрана: Представление потоков в окне Parallel Stacks 2022.

В следующей таблице описаны основные характеристики представления потоков.

Выноска Имя элемента Описание
1 Сегмент стека вызовов или узел Содержит набор методов для единого или нескольких потоков. Если кадр не имеет стрелочных линий, подсоединённых к нему, кадр показывает весь путь вызова для потока(ов).
2 Синее выделение Указывает путь вызова текущего потока.
3 Линии со стрелками Подключите узлы, чтобы составить общий путь вызова для потока(ов).
4 Заголовок узла Показывает количество процессов и потоков, имени потока и идентификатора потока для узла.
5 Метод Представляет один или несколько фреймов стека в одном методе.
6 Подсказка по методу Отображается при наведении указателя мыши на метод. В представлении Потоков, подсказка отображает все потоки в таблице, аналогично окну Потоков.
7 Описание потока Созданное ИИ описание потока. Начиная с Visual Studio 2022 версии 17.13 preview 1, это описание присутствует при установке и активации Copilot.

Просмотр задач

Если приложение использует объекты System.Threading.Tasks.Task (управляемый код) или объекты task_handle (машинный код) для выражения параллелизма, можно использовать представление Задач. Представление "Задачи" показывает стеки вызовов задач вместо потоков.

В представлении задачи:

  • Стеки вызовов потоков, которые не выполняют задачи, не отображаются.
  • Стеки вызовов потоков, которые выполняют задачи, визуально обрезаются сверху и снизу, чтобы отобразить наиболее релевантные фреймы для задач.
  • Если несколько задач находятся в одном потоке, стеки вызовов этих задач отображаются в отдельных узлах.

Чтобы просмотреть весь стек вызовов, вернитесь в просмотр потоков, щелкнув правой кнопкой мыши в рамке стека и выбрав Перейти к потоку.

На следующем рисунке показано представление потоков вверху и соответствующее представление задач внизу.

Скриншот представлений потоков и задач.

Наведите указатель мыши на метод, чтобы отобразить подсказку с дополнительными сведениями. В представлении задач подсказка отображает все задачи в таблице, аналогичной окну задач .

На следующем рисунке показана подсказка для метода в представлении потоков наверху и в соответствующем представлении Задач внизу.

скриншот с подсказками для потоков и задач.

Вид метода

В представлении Потоки или Задачи можно свести диаграмму к текущему методу, выбрав значок Включение/Выключение представления метода на панели инструментов. В представлении методов отображены все методы во всех потоках, которые либо вызывают текущий метод, либо вызываются им. На следующем рисунке показано, как те же сведения выглядят в представлении Потоков слева и в представлении методов справа.

Если вы переключитесь на новый кадр стека, этот метод станет текущим, и на панели Метода будут отображаться все вызывающие и вызываемые процедуры для нового метода. Это может привести к тому, что некоторые потоки будут отображаться или исчезать из вида в зависимости от того, присутствует ли этот метод в их стеках вызовов. Чтобы вернуться к представлению стека вызовов, снова выберите значок представления метода панели инструментов.

Видеоурок по отладке потоков и задач с использованием параллельных стеков

В этих видео учебниках показано, как использовать представления потоков и задач окна Параллельных стеков в Visual Studio 2022 для отладки многопоточных приложений.