控制进程和线程

执行用户模式调试时,可以激活、显示、冻结、取消冻结、挂起和取消挂起进程和线程。

当前活动进程是当前正在调试的进程。 同样, 当前 线程或 活动 线程是调试器当前正在控制的线程。 许多调试器命令的操作由当前进程和线程的标识决定。 当前进程还确定调试器使用的虚拟地址映射。

调试开始时,当前进程是调试器附加到的进程,或者是导致异常进入调试器的进程。 同样,当前线程是调试器附加到进程时处于活动状态或导致异常的线程。 但是,可以使用调试器更改当前进程和线程,以及冻结或取消冻结单个线程。

在内核模式调试中,进程和线程不受本节中所述的方法控制。 有关如何在内核模式下操作进程和线程的详细信息,请参阅 更改上下文

显示进程和线程

若要显示进程和线程信息,可以使用以下方法:

设置当前进程和线程

若要更改当前进程或线程,可以使用以下方法:

冻结和挂起线程

调试器可以通过 暂停 线程或 冻结 线程来更改线程的执行。 这两个操作具有一些不同的效果。

每个线程都有一个与之关联的 挂起计数 。 如果此计数为 1 或更大,则系统不会运行线程。 如果计数为零或更低,则系统在适当时运行线程。

通常,每个线程的挂起计数为零。 当调试器附加到某个进程时,它将该进程中所有线程的挂起计数递增 1。 如果调试器从进程分离,则会将所有挂起计数减 1。 调试器执行进程时,它会暂时将所有挂起计数减一。

可以使用以下方法控制调试器中任何线程的挂起计数:

这些命令最常见的用途是将特定线程的暂停计数从 1 提高到 2。 当调试器执行或从进程分离时,线程的挂起计数为 1,并且即使进程中的其他线程正在执行,也会保持挂起状态。

即使在执行 非侵入性调试时,也可以挂起线程。

调试器还可以 冻结 线程。 此操作类似于以某种方式挂起线程。 但是,“冻结”只是调试器设置。 Windows 操作系统中的任何内容都不会识别到此线程有任何不同之处。

默认情况下,所有线程都是取消冻结的。 当调试器导致进程执行时,冻结的线程不会执行。 但是,如果调试器从进程分离,则所有线程都会解冻。

若要冻结和取消冻结单个线程,可以使用以下方法:

在任何情况下,当调试器进入目标进程时,属于目标进程的线程永远不会执行。 仅当调试器执行进程或分离时,线程的挂起计数才会影响线程的行为。 仅当调试器执行进程时,冻结状态才影响线程的行为。

其他命令中的线程和进程

可以在许多其他命令之前添加线程说明符或进程说明符。 有关详细信息,请参阅各个命令主题。

可以在许多命令和扩展命令之前添加 ~e (线程特定的命令) 限定符。 此限定符会导致针对指定的线程执行命令。 如果要将命令应用于多个线程,此限定符特别有用。 例如,以下命令对正在调试的每个线程重复 !gle extension 命令。

~*e !gle 

多个系统

调试器可以同时附加到多个目标。 当这些进程包括转储文件或包含多台计算机上的实时目标时,调试器将为每个操作引用系统、进程和线程。 有关此类调试的详细信息,请参阅 调试多个目标