Debugging 我可以将调试器预附加到服务吗?

Debugging 我可以将调试器预附加到服务吗?,debugging,windows-services,Debugging,Windows Services,我有一个Windows服务,我想看看它启动时在做什么。通常,为了完成类似的任务,我会硬编码一个线程。睡眠10秒钟,给我足够的时间连接调试器。这是有效的,但很烦人,因为我需要重新编译一次以放入暂停,然后在我(希望记得)取出暂停时再次编译。我知道我也可以硬编码一个中断命令,但这也需要我重新编译我的解决方案 我知道我也可以将我的服务逻辑分离到一个单独的项目中,该项目可以在VisualStudio中运行,我大部分时间都可以使用它,但有时我希望看到我的服务作为服务运行时到底在做什么 有没有一种方法可以让我

我有一个Windows服务,我想看看它启动时在做什么。通常,为了完成类似的任务,我会硬编码一个线程。睡眠10秒钟,给我足够的时间连接调试器。这是有效的,但很烦人,因为我需要重新编译一次以放入暂停,然后在我(希望记得)取出暂停时再次编译。我知道我也可以硬编码一个中断命令,但这也需要我重新编译我的解决方案

我知道我也可以将我的服务逻辑分离到一个单独的项目中,该项目可以在VisualStudio中运行,我大部分时间都可以使用它,但有时我希望看到我的服务作为服务运行时到底在做什么


有没有一种方法可以让我的调试器连接到我的服务,这样我就可以看到它在启动时所做的事情,而无需硬编码和重新编译任何东西?

请查看Visual Studio中“工具”菜单上的“连接到进程”。您可以在代码中设置断点,然后启动流程并调试服务。您可能需要放置一个线程。sleep()来给您足够的时间做出反应


您必须启动服务,然后才能在Visual Studio中附加到进程。thread.sleep()将为您提供执行附加操作的时间,而无需启动代码。

以下是Microsoft关于如何完成此操作的建议:

有一个注册表项,您可以在创建调试程序后立即将其附加到进程

将以下代码段另存为*.reg文件并导入注册表:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\services.exe]
"Debugger"="c:\\Program Files\\Debugging Tool For Windows\\windbg.exe"
请记住将“services.exe”更改为实际的服务可执行文件名

您还可以使用gflag工具来简化工作。有关详细信息,请查看