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


Практическое руководство. Использование окна потоков

Обновлен: Ноябрь 2007

Этот раздел применим для следующих версий.

Выпуск

Visual Basic

C#

C++

Web Developer

Экспресс-выпуск

Тема не применяется Тема не применяется Тема не применяется Тема не применяется

Standard

Тема применяется Тема применяется Тема применяется Тема применяется

Pro и Team

Тема применяется Тема применяется Тема применяется Тема применяется

Условные обозначения:

Тема применяется

Применимо

Тема не применяется

Неприменимо

Тема применяется, но команда по умолчанию сокрыта

Команда или команды по умолчанию скрыты.

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

Окно Потоки содержит список всех потоков, которые в настоящее время существуют в вашей программе. Для каждого потока этот список предоставляет некоторые полезные сведения:

  • столбцы Имя и Идентификатор, содержащие имя потока и значение идентификаторов, помогают идентифицировать потоки;

  • столбец Приоритет показывает приоритет, который система назначила для каждого потока;

  • столбец Приостановить показывает счетчик приостановки, который определяет, возможно ли запустить поток в данный момент. Подробности о счетчике приостановок содержатся в разделе "Замораживание и размораживание потоков" в данном разделе;

  • столбец Категория классифицирует потоки на три категории: потоки пользовательского интерфейса, обработчики вызова удаленной процедуры и рабочие потоки. Этот столбец также определяет основной поток;

  • столбец Расположение показывает в каком месте кода был создан данный поток;

  • самый левый столбец — столбец флагов, он не имеет названия. Если включить флаг потока, который требуется изучить, в этом столбце появляется значок флага. Инструкции по потокам см. в разделе Практическое руководство. Установка и снятие отметки для потока;

  • столбец, расположенный вторым слева, также не имеет названия. Это столбец активного потока. В этом столбце желтая стрелка указывает активный поток.

Открытие окна потоков в режиме приостановки или в режиме выполнения

  • В меню Отладка выберите пункт Окна и затем щелкните Потоки.

Сортировка списка потоков

  1. В окне Потоки нажмите кнопку в верхней части любого столбца.

    • Чтобы отсортировать отмеченные потоки в начало списка, нажмите крайнюю левую кнопку.

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

    • Чтобы отсортировать потоки по возрастанию номеров ИД, нажмите кнопку ИД.

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

    • Чтобы сортировать потоки по имени, нажмите кнопку Имя.

    • Чтобы сортировать потоки по исходному положению, нажмите кнопку Расположение.

    • Чтобы отсортировать потоки по убыванию приоритета, нажмите кнопку Приоритет.

    • Чтобы отсортировать потоки по возрастанию счетчика приостановки, нажмите кнопку Приостановка.

  2. Если требуется изменить порядок сортировки, нажмите кнопку же еще раз. Если отсортировать потоки, например, по идентификационному номеру (ИД), потоки cортируются по возрастанию. При повторном нажатии кнопки ИД, потоки будут сортироваться по убыванию ИД.

Переключение контекста отладки на другой поток

  • В окне Потоки щелкните правой кнопкой мыши поток и выберите пункт Переключение потока в контекстном меню.

    либо

  • Дважды щелкните любой поток.

    Желтая стрелка указывает на активный поток.

Замораживание и размораживание потоков

Потоки могут быть замороженными или размороженными. Когда поток заморожен (заблокирован), система не начнет его выполнение даже если будут доступны все ресурсы.

В машинном коде, потоки могут быть приостановлены или возобновлены путем вызова функций Windows SuspendThread и ResumeThread или функций MFC CWinThread::SuspendThread и CWinThread::ResumeThread. Вызов SuspendThread или ResumeThread изменяет счетчик приостановок, который отображается в окне Потоки. Однако замораживание или размораживание собственного потока не приводит к изменению счетчика приостановки. В машинном коде поток невозможно выполнить, если он является размороженным и имеет счетчик приостановок равным нулю.

В управляемом коде, замораживание или размораживание потока приводит к изменению счетчика приостановок. В управляемом коде замороженный поток имеет число приостановок, равное 1. В машинном — замороженный поток имеет счетчик приостановок, равным нулю, если поток был приостановлен путем вызова SuspendThread.

w15yf86f.alert_note(ru-ru,VS.90).gifПримечание.

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

Заморозка выполняемого потока (т.е. запрет его выполнения)

  • В окне Потоки щелкните поток правой кнопкой мыши и выберите в контекстном меню команду Заморозить.

Разморозка потока (т.е. разрешение его выполнения)

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

Отображение стека вызовов потоков и переключение между фреймами

В многопотоковых программах каждый поток имеет свой собственный стек вызовов. Окно Потоки обеспечивает удобный способ просмотра стеков вызовов потоков.

Просмотр стека вызовов потока

  • В окне Потоки наведите указатель мыши в столбце активного потока на строку, соответствующую интересующему потоку.

    После небольшой задержки отобразится Подсказка Данных. Он показывает стек вызовов для потока.

См. также

Задачи

Пошаговое руководство. Отладка многопоточных приложений

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

Отладка многопоточных приложений