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


Просмотр потоков в отладчике Visual Studio с помощью окна потоков (C#, Visual Basic, C++)

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

Использование окна потоков

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

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

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

  • Идентификатор: отображает идентификационный номер для каждого потока.

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

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

  • Имя. Указывает каждый поток по имени, если оно имеется, или значение <No Name>.

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

  • Приоритет: расширенный столбец (скрытый по умолчанию), который отображает приоритет или приоритет, назначенный системе каждому потоку.

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

  • Приостановленное число: расширенный столбец (скрытый по умолчанию), отображающий приостановленное число. Этот счетчик определяет, может ли поток выполняться. Дополнительные сведения о счетчиках приостановок см. в разделе Замораживание и размораживание потоков.

  • Имя процесса: расширенный столбец (скрытый по умолчанию), который отображает процесс, к которому принадлежит каждый поток. Данные в этом столбце могут быть полезны при отладке большого количества процессов.

  • Идентификатор процесса: расширенный столбец (скрытый по умолчанию), который отображает идентификатор процесса, к которому принадлежит каждый поток.

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

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

  • Пока Visual Studio находится в режиме отладки, выберите меню Отладка, наведите указатель мыши на пункт Windows, а затем выберите Потоки.

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

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

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

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

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

  • Выберите Показывать только помеченные потоки на панели инструментов в верхней части окна Потоки. (Если вариант недоступен, сначала необходимо пометить некоторые потоки.)

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

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

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

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

Примечание.

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

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

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

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

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

Желтая стрелка указывает текущий поток (и размещение указателя выполнения). Исходный маркер текущего потока также остается в виде контура.

Желтая стрелка указывает текущий поток (и размещение указателя выполнения). Зеленая стрелка с загнутым наконечником указывает, что поток, не являющийся текущим, имеет текущий контекст отладчика.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    - или -

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

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

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

Совет

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

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

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

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

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

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