使用 KDbgCtrl
KDbgCtrl (内核调试控件,kdbgctrl.exe) 工具可用于控制来自目标计算机的内核调试连接。
若要使用此工具,目标计算机必须运行 Windows Server 2003 或更高版本的 Windows。
KDbgCtrl 可以控制五种不同的设置:完整内核调试、自动内核调试、User-Mode 错误处理、阻止内核调试以及 DbgPrint 缓冲区的大小。
若要使用 KDbgCtrl,必须在上次启动之前已在目标计算机的启动设置中启用了内核调试。 如果未执行此操作,则 KDbgCtrl 不能用于启用内核调试。 有关这些启动设置的详细信息 ,请参阅启动参数以启用调试 。
完整内核调试
启用完整内核调试后,在主计算机上运行的内核调试器可能会中断到目标计算机中。 如果命中内核模式异常,目标计算机将中断内核调试器。 还允许从目标到主机的消息,例如 DbgPrint 输出、符号加载消息和重定向的用户模式调试器。
如果禁用此设置,目标将忽略来自主计算机的所有信号。
默认启用完整内核调试。 若要检查当前设置值,请使用 kdbgctrl -c。 若要禁用此设置,请使用 kdbgctrl -d。 若要启用此设置,请使用 kdbgctrl -e。
如果要检查当前设置,并使用它来控制批处理文件中的执行,可以使用 kdbgctrl -cx 命令。 有关此命令的详细信息,请参阅 KDbgCtrl Command-Line 选项。
自动内核调试
如果启用了完整内核调试,则自动内核调试的当前设置不重要 -- 允许所有通信。
禁用完整内核调试并启用自动内核调试时,只有目标计算机可以启动调试连接。
在这种情况下,只有内核模式异常、断点或其他内核模式事件才会建立连接。 不会为 DbgPrint 输出、符号加载消息、重定向的用户模式调试器输入和输出或其他类似消息建立连接 - 这些消息将存储在 DbgPrint 缓冲区中,而不是发送到内核调试器。
如果异常或事件导致目标中断到内核调试器中,则完全内核调试将自动打开,就像执行 kdbgctrl -e 一样。
默认情况下,自动内核调试处于禁用状态, (尽管这是无关紧要的,除非禁用了全内核调试以及) 。 若要检查当前设置值,请使用 kdbgctrl -ca。 若要禁用此设置,请使用 kdbgctrl -da。 若要启用此设置,请使用 kdbgctrl -ea。
用户模式错误处理
启用 User-Mode 错误处理后,某些用户模式事件将导致目标计算机中断内核调试器。
具体而言,所有 int 3 中断(例如调试器插入到代码中的断点或对 DbgBreakPoint 的调用)都将导致内核调试器中断。 但是,标准异常(如访问冲突和被零除)通常不会发送到内核调试器。
如果用户模式调试器已附加到进程,则此调试器将捕获所有用户模式错误,并且不会更改内核调试器。 有关各种用户模式错误处理程序的优先级排名,请参阅 启用事后调试。
若要 User-Mode 错误处理才能正常工作,还必须启用“完全内核调试”或“自动内核调试”。
User-Mode 默认启用错误处理。 若要检查当前设置值,请使用 kdbgctrl -cu。 若要禁用此设置,请使用 kdbgctrl -du。 若要启用此设置,请使用 kdbgctrl -eu。
阻止内核调试
在某些情况下,你可能想要设置目标计算机进行内核调试,但要等到启动目标计算机之后再启用内核调试。 可以通过阻止内核调试来执行此操作。
重要
在使用 BCDEdit 更改启动信息之前,可能需要暂时挂起测试电脑上的 Windows 安全功能,例如 BitLocker 和安全启动。 测试完成后重新启用这些安全功能,并在禁用安全功能时适当地管理测试电脑。
若要阻止内核调试,请使用如下所示的命令设置目标计算机:
bcdedit /debug on
bcdedit /dbgsettings 1394 channel:32 /start DISABLE /noumex
重启目标计算机时,将为内核调试做好准备,但内核调试和 User-Mode 错误处理将被禁用。 此时,主计算机将无法附加到目标计算机,内核调试器不会捕获 bug 检查,并且用户模式异常不会导致内核调试器中断。
准备就绪后,可以通过输入以下命令来启用内核调试 (,而无需重启目标计算机) 。
kdbgctrl -db
kdbgctrl -e
稍后,可以通过输入以下命令来禁用内核调试。
kdbgctrl -d
kdbgctrl -eb
可以使用 kdbgctrl -cb 检查是否阻止内核调试。
DbgPrint 缓冲区大小
DbgPrint 缓冲区存储目标计算机已发送到内核调试器的消息。
如果启用了完整内核调试,这些消息将自动显示在内核调试器中。 但是,如果禁用此选项,这些消息将存储在缓冲区中。 稍后可以启用内核调试,连接到内核调试器,并使用 !dbgprint 扩展查看此缓冲区的内容。 有关此缓冲区的详细信息,请参阅 DbgPrint 缓冲区。
在免费版本的 Windows 上,DbgPrint 缓冲区的默认大小为 4 KB。 若要确定当前缓冲区大小,请使用 kdbgctrl -cdb。 若要更改缓冲区大小,请使用 kdbgctrl -sdbSize,其中 Size 指定新的缓冲区大小。 有关语法详细信息,请参阅 KDbgCtrl Command-Line 选项。
示例
若要显示所有当前设置,请使用以下命令:
kdbgctrl -c -ca -cu -cb -cdb
若要还原默认设置,请使用以下命令:
kdbgctrl -e -da -eu -db -sdb 0x1000
若要锁定主计算机,使其仅在出现异常时联系,请使用以下命令:
kdbgctrl -d -ea -eu
若要禁用所有内核调试,请使用以下命令:
kdbgctrl -d -da
如果要禁用所有内核调试,可能还希望增加 DbgPrint 缓冲区的大小。 这可确保保存所有消息,以防稍后需要查看它们。 如果有一兆字节的内存要备用,则可以使用以下命令:
kdbgctrl -sdb 0x100000
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈