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

如果用户模式应用程序已在运行,调试器可以 无创地调试它。 使用非侵入式调试时,没有那么多的调试操作。 但是,可以最大程度地减少调试器对目标应用程序的干扰。 如果目标应用程序已停止响应,则非侵入性调试非常有用。

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

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

选择要调试的进程

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

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

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

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

CDB 命令行

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

cdb -pv -pProcessID

或者,若要通过指定进程名称来无创地调试正在运行的进程,请改用以下语法。

cdb -pv -pnProcessName

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

WinDbg 命令行

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

windbg -pv -pProcessID

或者,若要通过指定进程名称来无创地调试正在运行的进程,请改用以下语法。

windbg -pv -pnProcessName

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

WinDbg 菜单

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

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

调试器命令窗口

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

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

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

开始调试会话

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