调试服务
-
在调试配置中生成你的服务。
-
安装你的服务。
-
从 “服务控制管理器”、“服务器资源管理器”或代码启动服务。
-
使用管理凭据启动 Visual Studio,那么你就能附加到系统进程。
-
(可选)在 Visual Studio 菜单栏上,选择“工具”、“选项” 。 在“选项”对话框中,选择“调试”、“符号”,选择“Microsoft 符号服务器”复选框,然后选择“确定”按钮 。
-
在菜单栏上,从“调试” 或“工具” 菜单选择“附加到进程” 。 (键盘:Ctrl+Alt+P)
这将显示“进程” 对话框。
-
选择“显示所有用户的进程”复选框 。
-
在“可用进程” 部分,为服务选择进程,然后选择“附加” 。
提示
该进程的名称将与你的服务的可执行文件相同。
出现 “附加到进程” 对话框。
-
选择相应的选项,然后选择“确定” 以关闭对话框。
备注
你现在处于调试模式。
-
设置任意你想要在代码中使用的断点。
-
访问服务控制管理器并操作你的服务,发送停止、暂停和继续命令以命中你的断点。 有关运行服务控制管理器的详细信息,请参阅如何:启动服务。 请参见疑难解答:调试 Windows 服务。
Windows 服务的调试提示
附加到服务的进程使你可调试该服务的大多数代码,但不是全部。 例如,由于服务已经启动,你无法调试服务的 OnStart 方法中的代码或 Main
方法中用于在此处加载服务的代码。 避免这种限制的一种方法是在你的仅用于辅助调试的服务应用程序中创建一个临时辅助服务。 你可以安装两个服务,然后启动该虚拟服务来加载服务进程。 临时服务启动进程后,可以使用 Visual Studio 中的 “调试”菜单来附加到服务进程。
尝试添加对 Sleep 方法的调用延迟操作,直到你能够附加到该进程。
尝试更改常规控制台应用程序的程序。 为此,请按如下所示重写 Main
方法,这样它可以作为 Windows 服务和控制台应用程序运行,具体取决于启动方式。
如何:将 Windows 服务作为控制台应用运行
-
向你运行 OnStart 和 OnStop 方法的服务添加一个方法:
C#复制internal void TestStartupAndStop(string[] args) { this.OnStart(args); Console.ReadLine(); this.OnStop(); }
-
按如下所示重写
Main
方法:C#复制static void Main(string[] args) { if (Environment.UserInteractive) { MyNewService service1 = new MyNewService(args); service1.TestStartupAndStop(args); } else { // Put the body of your old Main method here. } }
-
在项目属性的“应用程序” 选项卡中,将“输出类型” 设置为“控制台应用程序” 。
-
选择“启动调试” (F5)。
-
若要将该程序再次作为 Windows 服务运行,请安装它并像通常启动 Windows 服务一样启动它。 不必恢复这些更改。
在某些情况下,你必须使用 Windows 调试器,比如当你想要调试仅在系统启动时发生的问题时。 下载 Windows 驱动程序工具包 (WDK),并查看如何调试 Windows 服务。