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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      - или -

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

Отображение только помеченных потоков

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

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

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

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

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

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

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

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

См. также

Задачи

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

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

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