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


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

В окне Потоки можно проверять потоки и работать с ними в отлаживаемом приложении.

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

  • Столбец флагов, где можно пометить поток, которому планируется уделить особое внимание.Сведения о способе пометки потока см. в разделе Практическое руководство. Установка и снятие отметки для потока.

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

  • Столбец ИД, который содержит идентификационные номера всех потоков.

  • Столбец Управляемый ИД, в котором содержатся управляемые идентификационные номера управляемых потоков.

  • Столбец Категория, в котором потоки классифицируются по категориям: потоки пользовательского интерфейса, обработчики удаленного вызова процедур (RPC) и рабочие потоки.Особая категория идентифицирует главный поток приложения.

  • Столбец Имя, в котором для каждого потока указывается имя, если оно имеется, или значение <No Name>.

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

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

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

  • Число приостановленных столбец, который содержит счетчик приостановки.Этот счетчик определяет, может ли поток выполняться.Описание счетчика приостановок см. в разделе "Замораживание и размораживание потоков" далее в этой теме.

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

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

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

Отображение или скрытие столбца

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

Переключение активного потока

  • Выполните одно из следующих действий.

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

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

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

Группирование и сортировка потоков

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

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

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

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

    Теперь потоки отсортированы по значениям в этом столбце.

  2. Если требуется изменить порядок сортировки, нажмите кнопку же еще раз.

    Потоки, которые отображались вверху списка, теперь отображаются внизу.

Группирование потоков

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

Сортировка потоков в группах

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

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

    Теперь потоки отсортированы по значениям в этом столбце.

Сворачивание и разворачивание всех групп

  • В панели инструментов, которая находится в верхней части окна Потоки, нажмите Развернуть группы или Свернуть группы.

Поиск конкретных потоков

В Visual Studio 2012 можно искать потоки, соответствующие указанной строке.При поиске потоков в окне Потоки отображаются все потоки, в каком-либо столбце которых найдено соответствие строке поиска.Эти сведения включают расположение потока, которое отображается вверху стека вызова в столбце Расположение.Однако по умолчанию поиск во всем стеке вызова не выполняется.

Поиск конкретных потоков

  • В панели инструментов, находящейся в верхней части окна Потоки, перейдите в поле Поиск и выполните одно из следующих действий:

    • введите строку поиска и нажмите клавишу ВВОД;

      - или -

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

  • (Необязательно) Чтобы включить в поиск полный стек вызова, выберите Поиск в стеке вызова.

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

Если поток заморожен, то система не начнет его выполнение, даже если будут доступны все ресурсы.

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

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

ПримечаниеПримечание

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

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

  • В панели инструментов, находящейся в верхней части окна Потоки, нажмите Заморозить потоки или Разморозить потоки.

    Это действие влияет только на потоки, выбранные в окне Потоки.

Отображение отмеченные потоки

Поток, которому планируется уделить особое внимание, можно пометить, поставив рядом с ним значок в окне Потоки.Дополнительные сведения см. в разделе Практическое руководство. Установка и снятие отметки для потока.В окне «потоки» можно выбрать для отображения всех потоков или только отмеченных потоков.

Чтобы отобразить только отмеченные потоки.

  • Нажмите кнопку «флаг» в левом верхнем углу потоки окно.

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

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

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

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

    Расположение будет развернуто, и будет отображен стек вызова для потока.

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

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

См. также

Задачи

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

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

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