如果用户模式应用程序已经在运行,调试器可以非侵入性地对其进行调试。对于非侵入性调试,您没有那么多的调试操作。但是,您可以最小化调试器对目标应用程序的干扰。如果目标应用程序已停止响应,则非侵入性调试非常有用。
在非侵入性调试中,调试器实际上并不附加到目标应用程序。调试器挂起目标的所有线程,并可以访问目标的内存、寄存器和其他此类信息。但是,调试器无法控制目标,因此g(Go)等命令不起作用。
如果尝试执行非侵入性调试期间不允许的命令,则会收到一条错误消息,指出“The debugger is not attached, so process execution cannot be monitored.(未附加调试器,因此无法监视进程执行。)”
您可以通过进程ID(PID)或进程名指定目标应用程序。如果按名称指定应用程序,则应使用进程的完整名称,包括文件扩展名。如果两个进程具有相同的名称,则必须改用进程ID。
要从WinDbg命令行无创地调试正在运行的进程,请使用以下语法指定-pv选项、-p选项和进程ID。
windbg -pv -p ProcessID
或者,要通过指定进程名来无创地调试正在运行的进程,请改用以下语法。
windbg -pv -pn ProcessName
如果调试器已处于活动状态,则可以使用“调试器命令”窗口中的.attach-v(attach to process)命令无创地调试正在运行的进程。
如果.attach-v命令成功,调试器将在下次调试器发出执行命令时调试指定的进程。由于在非侵入性调试期间不允许执行,因此调试器不能一次非侵入性调试多个进程。这个限制也意味着使用.attach-v命令可能会使现有的入侵调试会话变得不那么有用。
原文:https://www.cnblogs.com/yilang/p/12219781.html