自动调试服务应用程序
服务应用程序启动时,可以自动启动调试器。 或者,当服务应用程序遇到异常或执行 DebugBreak 命令时,它可以自动启动。 如果选择了其中一种方法,本主题将介绍如何继续操作。 如果不确定要选择哪种方法,请参阅 选择最佳方法。
然后执行以下步骤:
执行以下准备步骤之一:
- 如果计划从一开始就调试服务应用程序,包括其初始化代码,请按照 启用初始化代码调试中所述的过程进行操作。 或者,如果希望服务应用程序在调试器崩溃或遇到异常时闯入调试器,请按照 启用服务应用程序以中断调试器中所述的过程进行操作。
- 若要确保服务应用程序允许调试器正确运行,请执行 调整服务应用程序超时中所述的过程。
- 如果服务与单个 SvcHost 进程中的其他服务结合使用,请执行隔离服务中所述的过程。
如果服务已在运行,则必须重新启动该服务,这些更改才能生效。 建议重启 Windows 本身,以删除正在运行的服务的任何影响。 如果不想重启 Windows,请使用以下命令,其中 ServiceName 是服务的名称:
net stop ServiceName net start ServiceName
如果选择调试服务应用程序的初始化代码,则服务启动时,将启动调试器并附加到服务应用程序。
如果选择允许调试器由异常触发,则服务应用程序将正常执行,直到遇到异常或执行 DebugBreak 函数。 此时,调试器将启动并附加到服务应用程序。
下一步取决于在步骤 1 中指定的调试器命令行:
- 如果指定了不带任何远程处理选项的调试器,则会启动此调试程序,并且其窗口变为可见。
- 如果使用 -server 和 -noio 选项指定 NTSD,则 NTSD 将在没有控制台窗口的情况下启动。 然后,可以通过使用 -remote 参数启动任何用户模式调试器,从另一台计算机连接到调试会话。 有关说明,请参阅 激活调试客户端。
- 如果使用 -d 选项指定了 NTSD,则 NTSD 将在没有控制台窗口的情况下启动。 然后,可以使用在另一台计算机上运行的内核调试器连接到调试会话。 有关说明,请参阅 从内核调试器控制 User-Mode 调试器。
- 如果使用 -ddefer 和 -server 选项指定 NTSD,则 NTSD 将在没有控制台窗口的情况下启动。 然后,可以使用内核调试器和用户模式远程调试器连接到调试会话,该调试器在与服务 (不同的计算机上运行,但可能与彼此) 相同的计算机。 有关说明,请参阅 将此方法与远程调试相结合。
调试器启动时,服务在初始进程断点、异常或 DebugBreak 命令处暂停。 这使你可以检查服务应用程序的当前状态、设置断点,并做出任何其他所需的配置选择。
使用 g (Go) 或其他执行命令继续执行服务应用程序。