如何调试 Windows 服务
1个回答
推荐于2016-06-30 · 知道合伙人互联网行家
关注
展开全部
若要调试服务,必须首先启动服务,然后将一个调试器附加到正在运行服务的进程中。
然后可以使用 Visual Studio 的所有标准调试功能来调试应用程序。
例如,如果附加到 WinLogon 进程,然后停止调试,系统就会暂停,因为没有 WinLogon,系统无法运行。
只能将调试器附加到正在运行的服务。
附加进程会中断服务的当前运行;它并不真正终止或暂停服务的处理。
也就是说,如果开始调试时服务正在运行,则在进行调试时,该服务从技术上说仍处于“已启动”状态,但它的处理已挂起。
附加到服务的进程使您能够调试大多数服务代码,但并非全部;例如,由于服务已经启动,因此不能用这种方法调试服务的OnStart方法中的代码,或调试用于加载服务的Main方法中的代码。
解决此问题的一个方法是:在唯一作用是帮助调试的服务应用程序中创建一个临时服务。
可以将两个服务都安装上,然后启动此“虚拟”服务加载服务进程。
临时服务启动了进程后,就可以使用 Visual Studio 中的“调试”菜单来附加到服务进程。
当附加该进程之后,可以设置断点并使用这些断点来调试代码。
当退出用于附加到该进程的对话框时,实际上已处于调试模式。
您可以使用“服务控制管理器”
开始、停止、暂停和继续您的服务,因此命中已设置的断点。
调试成功后,移除此“虚拟”服务。
说明调试OnStart方法可能比较困难,因为 Windows 服务管理器将所有尝试启动服务的时间限制在 30 秒内。
然后可以使用 Visual Studio 的所有标准调试功能来调试应用程序。
例如,如果附加到 WinLogon 进程,然后停止调试,系统就会暂停,因为没有 WinLogon,系统无法运行。
只能将调试器附加到正在运行的服务。
附加进程会中断服务的当前运行;它并不真正终止或暂停服务的处理。
也就是说,如果开始调试时服务正在运行,则在进行调试时,该服务从技术上说仍处于“已启动”状态,但它的处理已挂起。
附加到服务的进程使您能够调试大多数服务代码,但并非全部;例如,由于服务已经启动,因此不能用这种方法调试服务的OnStart方法中的代码,或调试用于加载服务的Main方法中的代码。
解决此问题的一个方法是:在唯一作用是帮助调试的服务应用程序中创建一个临时服务。
可以将两个服务都安装上,然后启动此“虚拟”服务加载服务进程。
临时服务启动了进程后,就可以使用 Visual Studio 中的“调试”菜单来附加到服务进程。
当附加该进程之后,可以设置断点并使用这些断点来调试代码。
当退出用于附加到该进程的对话框时,实际上已处于调试模式。
您可以使用“服务控制管理器”
开始、停止、暂停和继续您的服务,因此命中已设置的断点。
调试成功后,移除此“虚拟”服务。
说明调试OnStart方法可能比较困难,因为 Windows 服务管理器将所有尝试启动服务的时间限制在 30 秒内。
快又稳
2024-10-28 广告
2024-10-28 广告
作为广州快又稳网络科技有限公司的工作人员,我们的Windows云服务器以其高配置、大带宽和低价格著称,提供极致性价比的选择。这些云服务器支持多种操作系统版本,包括最新的Windows系统,确保用户能够根据自己的需求进行灵活配置。我们致力于提...
点击进入详情页
本回答由快又稳提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询