如何调试 Windows 服务

文章翻译 文章翻译
文章编号: 824344 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文分步介绍了如何调试窗口通过使用 WinDbg 调试器 (windbg.exe) 的服务。若要调试 Windows 服务,您可以将 WinDbg 调试器附加到主机后的服务的过程该服务启动,也可以配置与 WinDbg 启动服务连接,以便您可以解决有关服务启动调试器问题。本文介绍了这两种方法。

要求

这文章假定您熟悉下列主题:
  • Windows 服务
  • WinDbg 调试器

WinDbg 调试器附加到服务,该服务启动后

此方法类似于您可以使用附加的方法是流程调试器,然后调试的进程。

使用所在的服务要调试的进程的进程 ID

  1. 若要确定进程 ID (PID) 的进程承载的要进行调试,该服务使用下列方法之一。
    • 方法 1: 使用任务管理器
      1. 用鼠标右键单击任务栏,然后单击 任务管理器." Windows 任务管理器 对话框显示框。
      2. 单击 进程 选项卡 Windows 任务管理器 对话框。
      3. 在下 映像名称单击图像承载的服务要调试的进程的名称。注意为相应的值来指定此进程的进程 ID PID 字段。
    • 方法 2: 使用任务列表实用程序 (tlist.exe)
      1. 单击 开始然后单击 运行." 运行 出现对话框。
      2. 在中 打开 框中键入 cmd然后单击 确定.
      3. 在命令提示符下,更改的目录路径反映在您的计算机上的 tlist.exe 文件的位置。

        注意 Tlist.exe 文件通常位于以下目录: 名 Files\Debugging 工具窗口
      4. 在命令提示符下键入 tlist 若要列出图像名称和进程的所有 Id您的计算机上当前运行的进程。

        注意 记下要承载服务的进程的进程 ID,您要进行调试。
  2. 在命令提示符下,更改以反映的目录路径您的计算机上的 windbg.exe 文件的位置。

    注意 如果未打开命令提示符,请按照步骤和方法 1 的 b。Windbg.exe 文件通常位于以下目录中:对于 Windows 名 Files\Debugging 工具。
  3. 在命令提示符下键入 windbg-p结果 /g 若要附加 WinDbg 调试器到承载您要调试服务的过程。

    注意 结果 是一个占位符托管服务到所需的进程的进程 ID调试。

使用所在的服务要调试的进程的图像名称

您可以使用此方法才是正好有一个运行进程承载您要运行该服务的实例。若要此操作,请执行以下步骤:
  1. 单击 开始然后单击运行." 运行 出现对话框。
  2. 在中 打开 框中键入cmd然后单击 确定 若要打开命令提示符。
  3. 在命令提示符下,更改以反映的目录路径您的计算机上的 windbg.exe 文件的位置。

    注意 Windbg.exe 文件通常位于以下目录: 名 Files\Debugging 工具的窗口。
  4. 在命令提示符下键入 windbg –pnImageName /g 若要附加 WinDbg 调试器到承载您要调试服务的过程。

    注意ImageName 是一个占位符图像名称所在的服务要调试的进程。""-pn"命令行选项指定的ImageName 命令行参数是映像名称此过程。

开始 WinDbg 调试器并附加到进程承载您要调试的服务

  1. 开始 Windows 资源管理器。
  2. 找到您的计算机上的 windbg.exe 文件。

    注意 Windbg.exe 文件通常位于以下目录: 名 Files\Debugging 工具窗口
  3. 运行 windbg.exe 文件一起使用 /g 命令行开关启动 WinDbg调试器。" /g 命令行开关允许设置断点后继续跟踪的进程。
  4. 在上 文件 菜单中,单击 将附加到进程 若要显示 附加到进程 对话框框中。
  5. 单击此处,选择对应于该进程节点托管调试,然后单击所需的服务确定.
  6. 在出现的对话框中,单击 若要保存基工作区信息。请注意,您现在可以调试您的服务的反汇编的代码。

将服务配置为使用 WinDbg 启动连接调试器

您可以使用此方法如果要调试服务服务启动相关的问题进行疑难解答。
  1. 配置"图像文件执行"选项。若要此操作,使用下列方法之一:
    • 方法 1: 使用全局标志编辑器 (gflags.exe)
      1. 开始 Windows 资源管理器。
      2. 在上找到 gflags.exe 文件您计算机。

        注意 Gflags.exe 文件通常位于以下目录: 名 Files\Debugging 工具的窗口。
      3. 运行 gflags.exe 文件来启动全局标志编辑器。
      4. 在中 图像文件名称 文本框中,键入托管到所需的服务的进程的图像名称调试。例如,如果您想要调试由进程承载服务作为图像名称、 类型具有 MyService.exe MyService.exe.
      5. 在下 目标单击以选中" 图像文件选项 选项。
      6. 在下 图像调试器选项,单击以选中 调试器 复选框。
      7. 在中 调试器 文字框中,键入您想要使用调试程序的完整路径。例如,如果您要在 WinDbg 调试器用于调试服务,您可以键入类似以下的完整路径: 名Windows\windbg.exe 的 Files\Debugging 工具
      8. 单击 应用然后单击 确定 若要退出全局标志编辑器。
    • 方法 2: 使用注册表编辑器
      1. 单击 开始然后单击 运行." 运行 出现对话框。
      2. 在中 打开 框中键入 注册表编辑器然后单击 确定 若要启动注册表编辑器。
      3. 重要 此部分、 方法或任务包含告诉您如何修改注册表的步骤。但是,如果注册表修改不当可能会出现严重问题。因此,请确保仔细遵循这些步骤。为增加保护,备份注册表之前对其进行修改。然后,您可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
        322756 如何备份和还原在 Windows 注册表


        在注册表编辑器中,找到并右键单击下面的注册表子项:
        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image 文件执行选项
      4. 指向 然后单击 密钥.在左窗格中的注册表编辑器,请注意, 新的密钥 # 1 为选择 (一个新的注册表子项的名称)编辑。
      5. 键入 ImageName 若要替换 新的密钥 # 1然后按输入。

        注意 ImageName 是一个占位符图像名称所在的服务要调试的进程。对于例如,如果您要调试的进程所承载服务图像名称、 类型为 MyService.exe MyService.exe.
      6. 用鼠标右键单击您在中创建的注册表子项步骤 e。
      7. 指向 然后单击 字符串值.在右窗格中的注册表编辑器,请注意的 新值 # 1新的注册表项的名称选择进行编辑。
      8. 替换 新值 # 1调试器然后按 ENTER 键。
      9. 用鼠标右键单击 调试器 注册表您在步骤 h 中创建,然后单击的项 修改." 编辑字符串 出现对话框。
      10. 在中 值数据 文本框中键入 DebuggerPath然后单击 确定.

        注意 DebuggerPath 是一个占位符,您想要使用调试程序的完整路径。例如,如果您希望使用 WinDbg 调试器调试服务,您可以键入完整与以下内容类似的路径:
        C:\Progra~1\Debugg~1\windbg.exe
  2. 调试器窗口出现在您的桌面上,和要使用调试程序进行交互,使您的服务交互。如果您不要使您的服务互动,调试器将启动,但您不能它并不能发出命令,请参阅。若要使您的服务的交互,请使用下面的方法:
    • 方法 1: 使用服务控制台
      1. 单击 开始然后指向 程序.
      2. 在上 程序 菜单指向 管理工具然后单击 服务." 服务 控制台此时将显示。
      3. 在右窗格中 服务控制台中,右键单击 站点,然后单击 属性.

        注意 站点 是一个占位符要调试服务的名称。
      4. 在上 登录 选项卡上,单击以选中" 允许服务与桌面交互 在下的复选框 本地系统帐户然后单击 确定.
    • 方法 2: 使用注册表编辑器
      1. 在注册表编辑器中,找到并单击下面的注册表子项:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
        注意 替换 站点 使用的名称要调试服务。例如,如果您想要调试服务名为 MyService,找到并单击以下注册表项:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService
      2. 在下 名称 在注册表编辑器的右窗格中,用鼠标右键单击 键入然后单击 修改." 编辑 DWORD 值 对话框此时将显示。
      3. 更改中的文本 值数据二进制或运算的结果与该二进制值的文本框当前文本和二进制值,0x00000100,作为两个操作数。该二进制文件值,0x00000100,对应于 SERVICE_INTERACTIVE_PROCESS 常数,在您的计算机上的 WinNT.h 头文件中定义。此常数指定该服务是交互式性质。
  3. 服务服务启动时,与通信服务控制管理器服务必须具有启动 (超时的时间服务期)。如果未收到服务控制管理器此超时内服务从"启动服务"的通知服务控制管理器终止托管服务的过程。这超时时间通常为少于 30 秒。如果您不调整这超时期限,服务控制管理器结束该进程和附加调试器,而您试图调试。若要调整此超时时间段),请执行以下步骤:
    1. 在注册表编辑器中,找到并右键单击下面的注册表子项:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
    2. 指向 然后单击 DWORD 值.在右窗格中的注册表编辑器,请注意, 新值 # 1 当选中 (新的注册表项的名称)用于编辑。
    3. 键入 ServicesPipeTimeout 若要替换 新值 # 1然后按输入。
    4. 用鼠标右键单击 ServicesPipeTimeout您在步骤 c 中创建,然后单击注册表项 修改." 编辑 DWORD 值 对话框此时将显示。
    5. 在中 值数据 文本框中键入 TimeoutPeriod然后单击 确定

      注意 TimeoutPeriod 是超时期限 (以毫秒为单位) 的值的占位符,您要为服务设置。例如,如果您要设置的超时值期间设置为 24 小时 (86400000 毫秒) 键入 86400000.
    6. 重新启动计算机。您必须重新启动计算机的服务控制管理器要应用此更改。
  4. 开始 Windows 服务。请执行以下步骤:
    1. 单击 开始然后指向 程序.
    2. 在上 程序 菜单指向 管理工具然后单击 服务." 服务 控制台此时将显示。
    3. 在右窗格中 服务控制台中,右键单击 站点,然后单击 开始.

      注意 站点 是一个占位符要调试服务的名称。

故障排除

您尝试通过网络调试服务之前,请确保符号和服务使用的源文件可以从该服务将在运行的计算机访问。若要这样做,请使用下列方法之一:
  • 至少读访问权限授予每个人文件夹的上您包含符号和服务使用的源文件的计算机。
  • 将这些符号和服务使用的源文件复制到该服务将在计算机运行。

参考

若要下载的工具和提到的实用程序在这篇文章,请访问下面的 Microsoft 网站:
对于 Windows 调试工具: 概述
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
有关详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的 Web 站点:
WinDbg 调试器
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
服务
http://msdn2.microsoft.com/en-us/library/ms685141.aspx
使用全局标志实用程序
http://msdn2.microsoft.com/en-us/library/ms792858.aspx

属性

文章编号: 824344 - 最后修改: 2012年7月4日 - 修订: 8.0
这篇文章中的信息适用于:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional Edition
关键字:?
kbimghlp kbregistry kbservice kbdebug kbmisctools kbhowtomaster kbmt KB824344 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 824344
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com