非侵入式调试(用户模式)

如果用户模式应用程序已在运行,调试器可以非侵入性地调试它。 使用非侵入性调试,无需执行任意数量的调试操作。 但是,可以将调试器对目标应用程序的干扰降到最低。 如果目标应用程序停止响应,则非侵入性调试非常有用。

在非侵入性调试中,调试器实际上不会附加到目标应用程序。 调试器会挂起所有目标线程,并有权访问目标的内存、寄存器和其他此类信息。 但是,调试器无法控制目标,因此 g(Go)命令不起作用。

如果尝试执行在非侵入性调试期间不允许的命令,将收到一条错误消息,指出“调试器未附加,因此无法监视进程执行。

选择要调试的进程

可以通过进程 ID(PID)或进程名称指定目标应用程序。

如果按名称指定应用程序,则应使用进程的完整名称,包括文件扩展名。 如果两个进程具有相同的名称,则必须改用进程 ID。

有关如何确定进程 ID 和进程名称的详细信息,请参阅 查找进程 ID

有关启动和停止非侵入性调试会话的信息,请参阅以下主题:

CDB 命令行

若要从 CDB 命令行以非侵入方式调试正在运行的进程,请在以下语法中指定 -pv 选项、-p 选项和进程 ID。

cdb -pv -p ProcessID

或者,若要通过指定进程名称以非侵入性方式调试正在运行的进程,请改用以下语法。

cdb -pv -pn ProcessName

还有其他几个有用的命令行选项。 有关命令行语法的详细信息,请参阅 CDB 命令行选项

WinDbg 命令行

若要从 WinDbg 命令行以非侵入方式调试正在运行的进程,请在以下语法中指定 -pv 选项、-p 选项和进程 ID。

windbg -pv -p ProcessID

或者,若要通过指定进程名称以非侵入性方式调试正在运行的进程,请改用以下语法。

windbg -pv -pn ProcessName

还有其他几个有用的命令行选项。 有关命令行语法的详细信息,请参阅 WinDbg 命令行选项

WinDbg 菜单

当 WinDbg 处于休眠模式时,可以通过单击“文件”菜单上的“附加到进程”或按 F6 来非侵入性地调试正在运行的进程。

出现“附加到进程”对话框时,选中“非侵入性”复选框。 然后选择包含所需进程 ID 和名称的行。 (还可以在“进程 ID”框中输入进程 ID。最后,单击“确定”。

调试器命令窗口

如果调试器已处于活动状态,则可以在调试器命令窗口中使用 .attach -v (附加到进程)命令以非侵入性方式调试正在运行的进程。

如果调试器已经以侵入性的方式调试了一个或多个进程,则可以使用 .attach 命令。 如果 CDB 处于休眠状态,但不能在休眠 WinDbg 中,则可以在 CDB 中使用此命令。

如果 .attach -v 命令成功,调试器将在下次调试器发出执行命令时调试指定的进程。 由于在非侵入性调试期间不允许执行,因此调试器不能一次非侵入性地调试多个进程。 此限制还意味着使用 .attach -v 命令可能会使现有入侵调试会话不那么有用。

启动调试会话

有关如何开始调试会话的详细信息,请参阅 调试器操作