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

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

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

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

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

Окно Параллельные стеки содержит следующие элементы управления панели инструментов.

Screenshot of Toolbar in Parallel Stacks window.

Icon Control Description
Threads/Tasks combo box Поле со списком Потоки/Задачи Переключает отображение между стеками вызова для потоков и стеками вызова для задач. Дополнительные сведения см. в разделах Представление "Задачи" и Представление "Потоки".
Show Only Flagged icon Показывать только помеченные Отображает стеки вызовов только для потоков, которые помечены в других окнах отладки, таких как окно Потоки GPU и окно Контроль параллельных данных.
Toggle Method View icon Переключение представления метода Переключает представления стека и представление метода. Дополнительные сведения см. в разделе Представление "Метод".
Auto Scroll to Current icon Автопрокрутка к текущему кадру стека Автоматически прокручивает граф для отображения текущего кадра стека. Этот компонент применяется при изменении текущего кадра стека из других окон или при попадании в новую точку останова в крупных графах.
Toggle Zoom icon Переключить элемент управления масштабом Показывает или скрывает элемент управления масштаба в левой части окна.

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

Screenshot of Toolbar in Parallel Stacks window 2022.

Icon Control Description
Threads/Tasks combo box Поле со списком Потоки/Задачи Переключает отображение между стеками вызова для потоков и стеками вызова для задач. Дополнительные сведения см. в разделах Представление "Задачи" и Представление "Потоки".
Filter icon Элемент управления фильтрами Отображает стеки вызовов только для определенного набора потоков, которые вам нужны.
Show Only Flagged icon Показывать только помеченные Отображает стеки вызовов только для потоков, которые помечены в других окнах отладки, таких как окно Потоки GPU и окно Контроль параллельных данных.
Toggle Method View icon Переключение представления метода Переключает представления стека и представление метода. Дополнительные сведения см. в разделе Представление "Метод".
Auto Scroll to Current icon Автопрокрутка к текущему кадру стека Автоматически прокручивает граф для отображения текущего кадра стека. Этот компонент применяется при изменении текущего кадра стека из других окон или при попадании в новую точку останова в крупных графах.
Toggle Zoom icon Переключить элемент управления масштабом Показывает или скрывает элемент управления масштаба в левой части окна.

Чтобы изменить масштаб вне зависимости от видимости элемента управления масштаба, можно также нажать клавишу CTRL и повернуть колесико мыши. Или можно нажать сочетание клавиш CTRL+SHIFT++ для увеличения масштаба и CTRL+SHIFT+- для уменьшения масштаба.
Search icon Элемент управления поиском С помощью этой функции можно легко искать кадры стека, а затем использовать стрелки для перехода между этими результатами.
Save icon Сохранить элемент управления Позволяет сохранять и экспортировать содержимое из параллельного окна стека в виде изображения.
External Code icon Показать внешний элемент управления кодом С помощью этой функции можно отображать и скрывать стеки из внешних кодов и библиотек.

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

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

Icon Description
Yellow arrow Указывает текущее расположение (активный кадр стека) текущего потока.
Threads icon Указывает текущее расположение (активный кадр стека) потока, не являющегося текущим.
Green arrow Указывает текущий кадр стека (текущий контекст отладчика). Имя метода выделяется полужирным шрифтом везде, где оно отображается.
Icon Description
Yellow arrow Указывает текущее расположение (активный кадр стека) текущего потока.
Threads icon Указывает текущее расположение (активный кадр стека) потока, не являющегося текущим.
Green arrow Указывает текущий кадр стека (текущий контекст отладчика). Имя метода выделяется полужирным шрифтом везде, где оно отображается.
Status Error Указывает, что текущий кадр стека имеет предупреждение о критическом состоянии, например Взаимоблокировка.
Status Excluded Указывает взаимоблокируемый узел.
Status Information Указывает, что текущий кадр стека содержит дополнительные сведения, такие как ожидание, ожидание блокировки, владение и т. д.
Status Blocked Указывает, что текущая задача находится в состоянии блокировки или ожидания и т. д.
Status Running Указывает, что текущая задача выполняется.

Элементы контекстного меню

Следующие элементы контекстного меню доступны при щелчке правой кнопкой мыши метода в представлении Потоки или Задачи. Последние шесть элементов аналогичны элементам в окне Стек вызовов.

Screenshot of Shortcut menu in Parallel Stacks window.

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

Screenshot of Shortcut menu in Parallel Stacks window 2022.

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

Представление "Потоки"

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

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

Если граф представления Потоки слишком велик и не помещается в окне, в окне появляется элемент управления Вид с высоты птичьего полета. Вы можете поместить кадр в элемент управления и переходить к разным частям графа.

На следующем рисунке показан один поток, идущий от основного кода к управляемому, а затем — к машинному. В текущем методе находятся шесть потоков. Один из них переходит в Thread.Sleep, другой переходит в Console.WriteLine, а затем в SyncTextWriter.WriteLine.

Screenshot of Threads view in Parallel Stacks window.

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

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

На следующем рисунке показан один поток, идущий от основного кода к управляемому, а затем — к машинному. Пять потоков находятся в текущем методе. Один продолжает работать в ServerClass.InstanceMethod, а другой продолжает работать в Worker.Thread.Start, а затем в StartupHook.Initialize.AnonymousMethod.

Screenshot of Threads view in Parallel Stacks window 2022.

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

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

Представление задач

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

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

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

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

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

Screenshot of Threads and Tasks views.

Screenshot of Tasks view in Parallel Stacks window.

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

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

Screenshot of Threads and Tasks tooltips.

Screenshot of Threads and Tasks tooltips.

Представление метода

Из представления Потокиили Задачи можно прикрепить график для текущего метода. Для этого следует щелкнуть значок Переключить представление метода на панели инструментов. Представление "Методы" показывает все методы для всех потоков, которые вызывают текущий метод или вызываются им. На следующем рисунке показано отображение одной и той же информации в представлении Потоки слева и в представлении "Методы" справа.

Screenshot of Methods view in Parallel Stacks window.

Screenshot of Methods view in Parallel Stacks window 2022.

Переключение на новый кадр стека делает этот метод текущим методом, и в представлении "Методы"отображаются все вызывающие и вызываемые объекты нового метода. Из-за этого некоторые потоки могут появиться на представлении или исчезнуть из него (в зависимости от того, отображается ли этот метод в их стеках вызова). Чтобы вернуться в представление стека вызовов, еще наз щелкните значок Представление "Методы" на панели инструментов.

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

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