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


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

Окно Параллельные стеки применяется при отладке многопотоковых приложений. Представление потоков содержит сведения о стеке вызова для всех потоков приложения. Оно также позволяет переходить в различные потоки и кадры стека в потоках. В управляемом коде Представление задач отображает стеки вызова объектов System.Threading.Tasks.Task. В машинном коде Представление задач отображает стеки вызова групп задач, параллельных алгоритмов, асинхронных агентов и упрощенных задач.

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

На следующем рисунке показан поток, идущий от Main через A до B, а затем во внешний код. Два других потока начались во внешнем коде, а затем перешли к A, но один из потоков продолжился в объект B и затем во внешний код, а другой потом продолжился в объект C и затем в метод AnonymousMethod.

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

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

Буква выноски

Имя элемента

Описание

A

Сегмент или узел стека вызова

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

B

Синее выделение

Указывает путь вызова текущего потока.

C

Линии со стрелками

Соединяют узлы и показывают единый путь вызова для потоков.

D

Всплывающая подсказка заголовка узла

Показывает идентификатор и пользовательское имя каждого потока, путь вызова которого использует данный узел.

E

Контекст метода

Представляет один или несколько кадров стека одного метода.

F

Всплывающая подсказка для контекста метода

Показывает подробные сведения всех кадров стека, которые представляются контекстом метода. Кадры стека для текущего потока отображаются жирным шрифтом.

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

Значки контекста метода

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

Значок

Описание

Желтая стрелка параллельных стеков

Указывает на то, что контекст метода содержит активный кадр стека текущего потока.

Значок потоков параллельных стеков

Указывает на то, что контекст метода содержит активный кадр стека потока, который не является текущим.

Зеленая стрелка параллельных стеков

Указывает на то, что контекст метода содержит текущий кадр стека. Имя этого метода выделено жирным шрифтом во всех узлах.

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

На следующем рисунке и в следующей таблице описываются элементы управления, доступные на панели управления "Параллельные стеки".

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

Буква выноски

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

Описание

A

Поле со списком "Потоки"/"Задачи"

Переключает отображение между стеками вызова для потоков и стеками вызова для задач. Дополнительные сведения см. в разделах по представлениям "Задачи" и "Потоки".

B

Показывать только помеченные

Отображает стеки вызова только для потоков (или задач), помеченных в окнах "Потоки" или "Параллельные задачи".

C

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

Переключает представление стека и представление метода. Дополнительные сведения см. в разделе представления "Метод".

D

Автопрокрутка к текущему кадру стека

Автоматически прокручивает схему для отображения текущего кадра стека. Этот компонент применяется при изменении текущего кадра стека из других окон или при появлении точки останова в крупных диаграммах.

E

Переключить элемент управления масштабом

Отображает или скрывает элемент управления масштабом. Чтобы изменить масштаб, можно также нажать клавишу CTRL и повернуть колесо мыши вне зависимости от того, где находится элемент управления.

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

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

Контекстное меню параллельных стеков

Menu Item

Описание

Переход к задаче (поток)

Выполняет ту же функцию, что и поле со списком на панели инструментов. При этом кадр стека остается выделенным.

Перейти к кадру

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

Перейти к исходному коду

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

Перейти к дизассемблированию

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

Показать внешний код

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

Шестнадцатеричный вывод

Переключается между десятичным и шестнадцатеричным отображением.

Сведения о загрузке символов

Отображает соответствующее диалоговое окно.

Параметры символов

Отображает соответствующее диалоговое окно.

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

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

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

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

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

На следующем рисунке представление задач параллельных стеков показано с правой стороны, а с левой стороны — соответствующее представление "Потоки".

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

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

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

Всплывающие подсказки параллельных стеков

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

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

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

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

См. также

Задачи

Пошаговое руководство. Отладка параллельного приложения

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

Пошаговое руководство. Отладка параллельного приложения

Ссылки

Task Class

Основные понятия

Параллельное программирование в .NET Framework

Другие ресурсы

Путеводитель по отладчику

Отладка управляемого кода