如何调试 Windows 服务
概要
本文分步介绍了如何使用 WinDbg 调试程序 (windbg.exe) 调试 Windows 服务。 要调试 Windows 服务,可以在服务启动后将 WinDbg 调试程序附加到托管该服务的进程,或者可以配置服务以在启动时附加 WinDbg 调试程序,以便解决与服务启动相关的问题。 本文将介绍这两种方法。
服务启动后将 WinDbg 调试程序附加到服务
此方法与你用于将调试程序附加到进程然后调试进程的方法类似。
使用托管要调试服务的进程的进程 ID
- 若要确定托管要调试服务的进程的进程 ID (PID),请使用以下任一方法。
方法 1: 使用任务管理器
- 右键单击任务栏,然后单击
“任务管理器”。 随即显示“Windows 任务管理器”对话框。 - 单击“Windows 任务管理器”对话框的
“进程”选项卡。 - 在“映像名称”下,单击托管要调试服务的进程的映像名称。 请注意,此进程的进程 ID 是由
相应的 PID 字段值指定的。
- 右键单击任务栏,然后单击
方法 2: 使用任务列表实用工具 (tlist.exe)
- 单击“开始”,然后单击
“运行”。 随即出现“运行”对话框。 - 在“打开”框中,键入
cmd,然后单击“确定”。 - 在命令提示符处,更改目录路径以显示计算机上的 tlist.exe 文件位置。
注意 tlist.exe 文件通常位于以下目录中: C:\Program Files\Debugging Tools for Windows - 在命令提示符处,键入
tlist 以列出计算机上当前运行的所有进程的映像名称以及进程 ID。
注意 请记下托管要调试服务的进程的进程 ID。
- 单击“开始”,然后单击
- 在命令提示符处,更改目录路径以显示计算机上的 windbg.exe 文件位置。
注意 如果命令提示符未打开,请按照方法 1 的步骤 a 和 b 操作。 windbg.exe 文件通常位于以下目录中: C:\Program Files\Debugging Tools for Windows。 - 在命令提示符下,键入 windbg –p
ProcessID /g 以将 WinDbg 调试程序附加到托管要调试服务的进程。
注意 ProcessID 是托管要调试服务进程的进程 ID 的占位符。
使用托管要调试服务的进程的映像名称
只能在托管要运行服务的进程正好存在一个正在运行的实例时使用此方法。 为此,请按照下列步骤操作:
- 单击“开始”,然后单击
“运行”。 随即出现“运行”对话框。 - 在“打开”框中,键入
cmd,然后单击“确定”以打开命令提示符。 - 在命令提示符处,更改目录路径以显示计算机上的 windbg.exe 文件位置。
注意 windbg.exe 文件通常位于以下目录中: C:\Program Files\Debugging Tools for Windows。 - 在命令提示符下,键入 windbg –pn
ImageName /g 以将 WinDbg 调试程序附加到托管要调试服务的进程。
注意 ImageName 是托管要调试服务进程的映像名称的占位符。 “-pn”命令行选项指定
ImageName 命令行参数是进程的映像名称。
启动 WinDbg 调试程序并附加到托管要调试服务的进程
- 启动 Windows 资源管理器。
- 找到计算机上的 windbg.exe 文件。
注意 windbg.exe 文件通常位于以下目录中: C:\Program Files\Debugging Tools for Windows - 同时运行 windbg.exe 文件和 /g 命令行开关以启动 WinDbg 调试程序。 设置断点后,/g 命令行开关允许跟踪的进程继续运行。
- 在“文件”菜单中,单击“附加到进程”以显示“附加到进程”对话框。
- 单击以选择托管要调试服务的进程相应节点,然后单击
“确定”。 - 在出现的对话框中,单击“是”以保存工作区基本信息。 请注意,现在你可以调试服务的反汇编代码。
配置服务以在启动时附加 WinDbg 调试程序
如果要解决与服务启动相关的问题,可以使用此方法调试服务。
配置“映像文件执行”选项。 为此,请使用下列方法之一:
方法 1: 使用全局标志编辑器 (gflags.exe)
- 启动 Windows 资源管理器。
找到计算机上的 gflags.exe 文件。
注意 gflags.exe 文件通常位于以下目录中: C:\Program Files\Debugging Tools for Windows。
运行 gflags.exe 文件以启动全局标志编辑器。
在“映像文件名称”文本框中,键入托管要调试服务的进程的映像名称。 例如,如果要调试由映像名称为 MyService.exe 的进程托管的服务,请键入
MyService.exe。
在“目标”下,单击以选中“映像文件选项”选项。
在“映像调试程序选项”下,单击以选中“调试程序”复选框。
在“调试程序”文本框中,键入要使用的调试程序的完整路径。 例如,如果要使用 WinDbg 调试程序来调试服务,可以键入与以下路径相似的完整路径: C:\Program Files\Debugging Tools for Windows\windbg.exe。单击“应用”,然后单击,“确定”退出全局标志编辑器。
方法 2: 使用注册表编辑器
- 单击“开始”,然后单击
“运行”。 随即出现“运行”对话框。 - 在“打开”框中,键入
regedit,然后单击“确定”以启动注册表编辑器。 - 重要说明
本部分(或称方法或任务)包含有关如何修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。
为了获得进一步的保护,请在修改注册表之前对其进行备份。 这样就可以在出现问题时还原注册表。
有关如何备份与还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何在 Windows 中备份和还原注册表- 上一篇: 仅通过转储来排除内存泄漏
- 下一篇: 使用Java中的InputStream读取文件数据