Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Окно потоков в отладчике Visual Studio позволяет проверять и работать с потоками в приложении, которое вы отлаживаете. Окно предоставляет функции для группировки, сортировки, пометки, остановки, разблокировки и поиска потоков в коде, а также отображения стеков вызовов.
Окно потоков доступно только при запуске отладчика Visual Studio. Во время сеанса отладки можно открыть окно, выбрав Отладка>Windows>Потоки.
В этой статье описывается, как работать с окном потоков для программ на C#, Visual Basic или C++. Если вы ищете пошаговые инструкции по использованию окна потоков, см. пошаговое руководство. Отладка с помощью окна "Потоки".
Исследуйте таблицу окна "Потоки"
Окно потоков представляет таблицу, в которой каждая строка соответствует отдельному потоку в приложении. В представлении по умолчанию таблица отображает все потоки в приложении. Параметры таблицы можно настроить для отображения только интересующих вас потоков. Таблица содержит несколько столбцов для подробного описания потоков. Вы можете настроить размещение столбцов и скрыть ненужные столбцы.
В следующей таблице описаны все доступные столбцы для таблицы потоков окна и указывает, является ли столбец видимым или скрытым в представлении по умолчанию. Столбцы перечислены в соответствии с положением таблицы по умолчанию слева направо.
Столбец | По умолчанию | Описание |
---|---|---|
флаг | Видимые, не помеченные | Красные флаги в этом столбце указывают темы, помеченные для особого внимания. Выберите флаг (значок станет красным), чтобы пометить или снять отметку (значок превратится в контур флага) темы. Цветной значок флага помогает отличить помеченный поток от других потоков в таблице. Дополнительные сведения см. в разделе Flag и unflag threads. |
текущий поток | Видимые, не помеченные | Желтый значок со стрелкой в этом столбце указывает текущий поток в приложении, работающем в отладчике. Значок стрелки в обводке в этом столбце указывает текущий контекст отладчика для несовпадающего потока. |
ID | Видимый | Предоставляет идентификационный номер для каждого потока. |
управляемого идентификатора | Видимый | Отображает управляемые идентификационные номера для управляемых потоков. |
категория | Видимый | Указывает категорию потоков в виде потоков пользовательского интерфейса, обработчиков вызовов удаленных процедур или рабочих потоков. Специальная категория определяет основной поток приложения. |
имя | Видимый | Определяет каждый поток по имени или <No Name>, если поток не имеет указанного имени. Если поток больше не существует, поток имеет метку [Thread Destroyed]. |
расположение | Видимый | Показывает, где выполняется поток в стеке вызовов приложения. Щелкните стрелку выпадающего списка, чтобы просмотреть полный стек вызовов для потока. Если поток больше не существует, местоположение помечено как <недоступно>. |
приоритет | Скрытый | Отображает приоритет или предпочтение, назначенное системой каждому потоку. |
маска распределения нагрузки | Скрытый | Отображает маску сходства процессора для каждого потока. В многопроцессорной системе маска привязки определяет процессоры, на которых может выполняться поток. |
приостановленный счет | Скрытый | Предоставляет количество приостановок. Это число определяет, может ли выполняться поток. Дополнительные сведения см. в разделе Замораживание и оттаивание потоков. |
имя процесса | Скрытый | Отображает процесс, к которому принадлежит каждый поток. Данные в этом столбце могут быть полезны при отладке многих процессов. |
идентификатор процесса | Скрытый | Показывает идентификатор процесса, к которому принадлежит каждый поток. |
Квалификатор транспорта | Скрытый | Уникально идентифицирует компьютер, к которому подключен отладчик. |
Отображение и скрытие столбцов таблицы
На панели инструментов окна потоки в раскрывающемся списке столбцов отображается список доступных столбцов. Разверните раскрывающийся список и выберите имя столбца, чтобы переключить видимость таблицы. Видимые столбцы указываются с флажком в списке.
Пометка тем для особого внимания
Используйте значок флага, чтобы пометить темы для особого внимания. Помеченные потоки указываются значком красного флага в окне таблицы потоков. Дополнительные сведения см. в разделе Flag и Unflag threads.
Показывать только помеченные потоки
Вы можете отфильтровать окно тем, чтобы отобразить только помеченные темы. В панели инструментов окна Threads выберите Показать только помеченные потоки (значок двойного флага). Вы также можете использовать сочетание клавиш Ctrl + 9. Это действие доступно только в том случае, если есть помеченные потоки.
Замораживание потоков и их оттаивание
При замораживании потока система не запускает выполнение потока, даже если ресурсы доступны.
В машинном коде можно приостановить или возобновить потоки, вызвав функции Windows SuspendThread
и ResumeThread
. Можно также вызвать функции MFC CWinThread::SuspendThread и CWinThread::ResumeThread. При вызове функции SuspendThread
или ResumeThread
изменяется число приостановленных , показанное в окне потоков . Приостановленное число не изменяется, если вы заморозили или оттаиваете собственный поток. Поток не может выполняться в машинном коде, если он не разблокирован и его счётчик приостановок равен нулю.
В управляемом коде количество приостановок изменяется при приостановке или возобновлении потока. Если вы заморозите поток в управляемом коде, его приостановленное число равно 1. При замораживании потока в родном коде его число приостановки равно 0, если только вы не используете вызов SuspendThread
.
Заметка
При отладке вызова из машинного кода в управляемый код управляемый код выполняется в том же физическом потоке, что и вызывающий машинный код. Приостановка или замораживание собственного потока также замораживает управляемый код.
Изменение выполнения для выбранных потоков
Вы можете заморозить или отморозить выполнение одного или нескольких потоков. В окне "Потоки" выберите потоки, для которых вы хотите обновить статус выполнения. На панели инструментов окна Потоки выберите Заморозить потоки (значок приостановки воспроизведения) или Разморозить потоки (зеленый значок воспроизведения). Действие применяется только к выбранным в данный момент потокам. Действия заморозки и разморозки также доступны в контекстном меню при щелчке правой кнопкой мыши для каждого потока.
Изменить текущий поток
Желтая стрелка в окне таблицы потоков указывает текущий поток (и местоположение указателя выполнения). Исходный текущий маркер потока также остается (показан значком с контуром стрелки).
Желтый значок со стрелкой в таблице окна Потоки указывает текущий поток (и расположение указателя выполнения). Значок зеленой стрелки с изогнутым хвостом указывает, что неактивный поток находится в текущем контексте отладчика.
Переключение на другой поток
Существует два способа переключения текущего потока в отладчике. Дважды щелкните любой поток в таблице окна потоков, чтобы сделать его текущим потоком. Вы также можете щелкнуть правой кнопкой мыши на потоке и выбрать Переключиться на поток.
Применение группировки и сортировки к потокам
Вы можете группировать потоки в окне таблицы потоков, используя те же критерии, что и доступные столбцы. Все критерии всегда доступны для группировки независимо от того, отображается ли соответствующий столбец в текущем представлении. Для таблицы можно выбрать только одну группу.
При группировке потоков заголовки отображаются в таблице для каждой группы. Заголовок содержит описание группы вместе с количеством участников в группе. Если вы группируете по Имя, можно увидеть группировки с заголовками, такими как рабочий поток или незамеченные потоки. Рядом с заголовком каждой группы появится значок стрелки развертывания/сворачивания.
После применения условий группировки представление таблицы окна Потоки обновляется, чтобы отображать потоки-члены для каждой группы под соответствующими заголовками. Чтобы показать или скрыть участников в текущем представлении, используйте значок со стрелкой для развертывания/сворачивания группы.
Можно также применить один критерий сортировки к потокам в таблице окна Threads. Группирование имеет приоритет над сортировкой. Например, можно группировать потоки по категории и затем сортировать их по идентификатору в каждой категории .
Группировать потоки в таблице
На панели инструментов окна разверните группу , раскрывающийся список и выберите критерии группировки потоков. Кроме того, можно удалить примененную группировку, выбрав None в раскрывающемся списке группировка.
Упорядочьте потоки в таблице
Вы применяете сортировку к потокам в окне таблицы потоки, выбрав заголовки столбцов в верхней части таблицы, как Например Имя или Идентификатор .
При выборе заголовка столбца в окне Threads обновляется представление таблицы, чтобы отобразить потоки, отсортированные по значениям в выбранном столбце. Выбранный столбец также отображает значок стрелки вверх или вниз. Значок стрелки вверх указывает сортировку по выбранному столбцу в порядке возрастания. Значок стрелки вниз указывает сортировку по выбранному столбцу в порядке убывания. Выберите заголовок столбца, чтобы изменить порядок сортировки.
Сортировка потоков в группах
Чтобы отсортировать потоки в группах в окне потоков, сначала используйте раскрывающийся список Группировать по, чтобы применить критерии группировки. Затем выберите заголовок столбца, чтобы отсортировать сгруппированные потоки по значениям в выбранном столбце.
Развернуть или свернуть все группы
Существует быстрый способ отображения или скрытия всех групп в текущем представлении. На панели инструментов окна потоки выберите Развернуть группы (значок двойного поля с символом плюса) или свернуть группы (значок двойного поля с символом минуса).
Поиск тем
Вы можете искать потоки в таблице окна Потоки и находить определенный контент в любом из видимых столбцов таблицы. При поиске Visual Studio отображает строки потока с данными столбцов, которые соответствуют строке поиска. Поиск также сканирует положение потока, которое отображается в верхней части стека вызовов в столбце Location.
Поиск определенного содержимого в темах
Существует несколько способов поиска тем для конкретного контента. На панели инструментов потоках введите строку, чтобы найти в поле поиска и выберите ВВОД. Вы можете указать буквы, цифры и специальные символы, такие как <
в строке поиска. По завершении поиска окно Threads обновляет таблицу, чтобы показать потоки с соответствующими результатами. Visual Studio выделяет те случаи, которые соответствуют строке поиска. Чтобы вернуться к обычному представлению потоков, щелкните значок X рядом с полем поиска.
Вы также можете поискать строку, которую вы искали ранее. В раскрывающемся списке поиска выберите предыдущую строку поиска.
Найдите полный стек вызовов
По умолчанию полный стек вызовов не ищется. Visual Studio ищет совпадение только в потоках, видимых в таблице окна Threads.
Вы можете включить полный стек вызовов, выбрав Включить стеки вызовов в поиске (значок элемента списка) на панели инструментов окна Потоки. Если параметр включен, значок элемента списка имеет границу.
Отображение стеков вызовов и переключение между фреймами
В многопоточной программе каждый поток имеет собственный стек вызовов. Окно Потоки предоставляет удобный способ просмотра этих стеков.
Совет
Для визуального представления стека вызовов для каждого потока используйте окно «Параллельные стеки».
Просмотр стека вызовов для потока
В окне таблицы потоков найдите поток, для которого требуется проверить полный стек вызовов. В столбце Location выберите стрелку развертывания/сворачивания слева от имени потока. Расположение расширяется, чтобы отобразить полный стек вызовов для потока. Щелкните стрелку еще раз, чтобы отобразить только расположение.
Просмотр или свертывание всех стеков вызовов
Вы можете управлять настройкой, которая определяет, будет ли окно всегда отображать полные стеки вызовов для всех потоков в таблице. На панели инструментов окна Потоки выберите опцию Развернуть стеки вызовов (значок коробки со знаком плюса) или опцию Свернуть стеки вызовов (значок коробки со знаком минуса).