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


Управление процессами и потоками

При отладке в пользовательском режиме вы активируете, отображаете, замораживаете, размораживаете, приостанавливаете и разблокируете процессы и потоки.

Текущий или активный процесс — это процесс, который в данный момент выполняет отладку. Аналогичным образом текущий или активный поток — это поток, которым в данный момент управляет отладчик. Действия многих команд отладчика определяются идентификатором текущего процесса и потока. Текущий процесс также определяет сопоставления виртуальных адресов, которые использует отладчик.

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

При отладке в режиме ядра процессы и потоки не управляются методами, описанными в этом разделе. Дополнительные сведения о том, как процессы и потоки управляются в режиме ядра, см. в разделе Изменение контекстов.

Отображение процессов и потоков

Для отображения сведений о процессах и потоках можно использовать следующие методы:

Настройка текущего процесса и потока

Чтобы изменить текущий процесс или поток, можно использовать следующие методы:

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

Отладчик может изменить выполнение потока, приостановив поток или заморозив поток. Эти два действия имеют несколько разных эффектов.

С каждым потоком связано число приостановок . Если это число равно одному или больше, система не запускает поток. Если счетчик равен нулю или меньше, система запускает поток, когда это необходимо.

Как правило, каждый поток имеет нулевое число приостановок. Когда отладчик подключается к процессу, он увеличивает количество приостановок всех потоков в этом процессе на единицу. Если отладчик отсоединяется от процесса, он уменьшает все счетчики приостановки на один. Когда отладчик выполняет процесс, он временно уменьшает все счетчики приостановки на один.

Вы можете управлять количеством приостановок любого потока из отладчика с помощью следующих методов:

  • Команда ~n (Suspend Thread) увеличивает число приостановки указанного потока на единицу.

  • Команда ~m (Resume Thread) уменьшает количество приостановок указанного потока на один.

Чаще всего эти команды используются для повышения количества приостановок определенного потока с одного до двух. Когда отладчик выполняет или отсоединяется от процесса, поток имеет число приостановок, равное одному, и остается приостановленным, даже если выполняются другие потоки в процессе.

Вы можете приостановить потоки даже при выполнении неинвазивной отладки.

Отладчик также может заморозить поток. Это действие похоже на приостановку потока в некотором смысле. Однако параметр "frozen" является только параметром отладчика. Ничто в операционной системе Windows не распознает, что в этом потоке все отличается.

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

Чтобы заморозить и разморозить отдельные потоки, можно использовать следующие методы:

В любом случае потоки, принадлежащие целевому процессу, никогда не выполняются, когда отладчик взломал целевой объект. Число приостановок потока влияет на поведение потока только в том случае, если отладчик выполняет процесс или отключает его. Состояние "Заморожено" влияет на поведение потока только тогда, когда отладчик выполняет процесс.

Потоки и процессы в других командах

Описатели потоков или описатели процессов можно добавлять раньше многих других команд. Дополнительные сведения см. в разделах об отдельных командах.

Вы можете добавить квалификатор ~e (команда для конкретного потока) перед множеством команд и команд расширения. Этот квалификатор приводит к выполнению команды относительно указанного потока. Этот квалификатор особенно полезен, если вы хотите применить команду к нескольким потокам. Например, следующая команда повторяет команду расширения !gle для каждого отлаживаемого потока.

~*e !gle 

Несколько систем

Отладчик может подключаться к нескольким целевым объектам одновременно. Если эти процессы включают файлы дампа или динамические целевые объекты на нескольких компьютерах, отладчик ссылается на систему, процесс и поток для каждого действия. Дополнительные сведения об этом виде отладки см. в разделе Отладка нескольких целевых объектов.