Практическое руководство. Использование окна потоков
В окне Потоки можно проверять потоки и работать с ними в отлаживаемом приложении.
В окне Потоки имеется таблица, каждая строка которой представляет поток в приложении.По умолчанию в таблице перечисляются все потоки приложения, но можно фильтровать этот список, чтобы в нем показывались только нужные потоки.В каждом столбце содержится свой тип сведений.Можно также скрывать некоторые столбцы.Если отображаются все столбцы, то в них имеются следующие сведения (слева направо):
Столбец флагов, где можно пометить поток, которому планируется уделить особое внимание.Сведения о способе пометки потока см. в разделе Практическое руководство. Установка и снятие отметки для потока.
Столбец активных потоков, в котором желтая стрелка указывает активный поток.Контур стрелки указывает поток, где выполнение было передано в отладчик.
Столбец ИД, который содержит идентификационные номера всех потоков.
Столбец Управляемый ИД, в котором содержатся управляемые идентификационные номера управляемых потоков.
Столбец Категория, в котором потоки классифицируются по категориям: потоки пользовательского интерфейса, обработчики удаленного вызова процедур (RPC) и рабочие потоки.Особая категория идентифицирует главный поток приложения.
Столбец Имя, в котором для каждого потока указывается имя, если оно имеется, или значение <No Name>.
Столбец Расположение, в котором показывается, где поток выполняется.Можно развернуть это расположение, чтобы отобразить полный стек вызова для потока.
Столбец Приоритет, в котором содержится приоритет, назначенный системой каждому потоку.
Столбец Маска сходства, который является дополнительным столбцом и обычно скрыт.В этом столбце показывается маска сходства процессора для каждого потока.В многопроцессорной системе маска сходства определяет, какой процессор в каком потоке может работать.
Число приостановленных столбец, который содержит счетчик приостановки.Этот счетчик определяет, может ли поток выполняться.Описание счетчика приостановок см. в разделе "Замораживание и размораживание потоков" далее в этой теме.
Столбец Имя процесса, содержащий имена процессов, которым принадлежит каждый поток.Этот столбец может быть полезен при отладке нескольких процессов, но обычно он скрыт.
Открытие окна потоков в режиме приостановки или в режиме выполнения
- В меню Отладка выберите пункт Окна и затем щелкните Потоки.
Отображение или скрытие столбца
- В панели инструментов, расположенной в верхней части окна Потоки, выберите Столбцы, а затем выделите или очистите имя столбца, который требуется отобразить или скрыть.
Переключение активного потока
Выполните одно из следующих действий.
Дважды щелкните любой поток.
Щелкните правой кнопкой мыши поток и выберите пункт Переключиться на поток.
Рядом с новым активным потоком появится желтая стрелка.Серый контур стрелки указывает поток, где выполнение было передано в отладчик.
Группирование и сортировка потоков
При группировании потоков в таблице появляется заголовок для каждой группы.В заголовке содержится описание группы, например "Рабочие потоки" или "Непомеченные потоки", и элемент управления "Дерево".Потоки-элементы каждой группы отображаются под заголовком группы.Если требуется скрыть потоки-элементы в какой-либо группе, можно свернуть эту группу с помощью элемента управления "Дерево".
Поскольку группирование имеет приоритет перед сортировкой, можно, например, группировать потоки по категориям, а затем по идентификаторам внутри каждой категории.
Сортировка потоков
В панели инструментов, находящейся в верхней части окна Потоки, нажмите кнопку в верхней части любого столбца.
Теперь потоки отсортированы по значениям в этом столбце.
Если требуется изменить порядок сортировки, нажмите кнопку же еще раз.
Потоки, которые отображались вверху списка, теперь отображаются внизу.
Группирование потоков
- В панели инструментов окна Потоки нажмите список Группировать по, а затем выберите критерий, по которому требуется группировать потоки.
Сортировка потоков в группах
В панели инструментов, которая находится в верхней части окна Потоки, нажмите список Группировать по, а затем выберите критерий, по которому требуется группировать потоки.
В окне Потоки нажмите кнопку в верхней части любого столбца.
Теперь потоки отсортированы по значениям в этом столбце.
Сворачивание и разворачивание всех групп
- В панели инструментов, которая находится в верхней части окна Потоки, нажмите Развернуть группы или Свернуть группы.
Поиск конкретных потоков
В Visual Studio 2012 можно искать потоки, соответствующие указанной строке.При поиске потоков в окне Потоки отображаются все потоки, в каком-либо столбце которых найдено соответствие строке поиска.Эти сведения включают расположение потока, которое отображается вверху стека вызова в столбце Расположение.Однако по умолчанию поиск во всем стеке вызова не выполняется.
Поиск конкретных потоков
В панели инструментов, находящейся в верхней части окна Потоки, перейдите в поле Поиск и выполните одно из следующих действий:
введите строку поиска и нажмите клавишу ВВОД;
- или -
нажмите раскрывающийся список рядом с полем Поиск и выберите строку поиска из предыдущего поиска.
(Необязательно) Чтобы включить в поиск полный стек вызова, выберите Поиск в стеке вызова.
Замораживание и размораживание потоков
Если поток заморожен, то система не начнет его выполнение, даже если будут доступны все ресурсы.
В машинном коде потоки могут быть приостановлены или возобновлены путем вызова функций Windows SuspendThread и ResumeThread или функций MFC CWinThread::SuspendThread и CWinThread::ResumeThread.При вызове SuspendThread или ResumeThread изменяется счетчик приостановок, который отображается в окне Потоки.Однако замораживание или размораживание собственного потока не приводит к изменению счетчика приостановок.В машинном коде поток не может выполняться, если он является размороженным и имеет счетчик приостановок, равный нулю.
В управляемом коде замораживание или размораживание потока приводит к изменению счетчика приостановок.В управляемом коде замороженный поток имеет счетчик приостановок со значением 1.В машинном коде замороженный поток имеет счетчик приостановок со значением 0 до тех пор, пока этот поток не будет приостановлен путем вызова SuspendThread.
![]() |
---|
При отладке вызова управляемого кода из машинного кода управляемый код выполняется в том же физическом потоке, что и вызывающий его машинный код.Приостановка выполнения или замораживание присущего данному объекту кода приводит также к замораживанию управляемого кода. |
Заморозка и разморозка выполнения потока
В панели инструментов, находящейся в верхней части окна Потоки, нажмите Заморозить потоки или Разморозить потоки.
Это действие влияет только на потоки, выбранные в окне Потоки.
Отображение отмеченные потоки
Поток, которому планируется уделить особое внимание, можно пометить, поставив рядом с ним значок в окне Потоки.Дополнительные сведения см. в разделе Практическое руководство. Установка и снятие отметки для потока.В окне «потоки» можно выбрать для отображения всех потоков или только отмеченных потоков.
Чтобы отобразить только отмеченные потоки.
- Нажмите кнопку «флаг» в левом верхнем углу потоки окно.
Отображение стека вызовов потоков и переключение между фреймами
В многопотоковых программах каждый поток имеет свой собственный стек вызовов.Окно Потоки обеспечивает удобный способ просмотра этих стеков.
Просмотр стека вызовов потока
В столбце Расположение нажмите перевернутый треугольник рядом с расположением потока.
Расположение будет развернуто, и будет отображен стек вызова для потока.
Просмотр и сворачивание стеков вызовов всех потоков
- В панели инструментов, которая находится в верхней части окна Потоки, нажмите Развернуть стеки вызовов или Свернуть стеки вызовов.
См. также
Задачи
Пошаговое руководство. Отладка многопоточных приложений