关于调试Windows Service的启动问题,基本可以参考下面的文章的“Configure a service to start with the WinDbg debugger attached”节:
How to debug Windows services
http://support.microsoft.com/kb/824344/en-us
但是有一类Windows Service,必须要用域用户身份运行,如VSTS中的Team Build Service,它们不能使用SYSTEM身份运行,所以就无法与桌面交互(Interactive with Desktop)。这样一来文章中提到的做法就无法达到要求,因为启动的Debugger将不会出现在桌面上。要解决这个问题,可以使用下面的方法,假设我们要在Team Build Service启动后立刻加载Debugger:
1. 用GFlags给TFSBuildService.exe设置下面的DebuggerPath:
D:\Debuggers\cdb.exe -server tcp:port=6789 -cf "c:\script.txt"
其中c:\script.txt是脚本文件,可以用类似下面的一些命令:
sxe -c ".dump /ma /u c:\\clr.dmp;g" clr
g
最后的g命令可保证服务能在超时前被启动起来,这样可以避免设置ServicesPipeTimeout 带来的重启。
2. 当服务被启动以后,运行WinDBG连接到cdb.exe建立的Debugging Server:
windbg -remote tcp:port=6789,server=localhost
3. 结束以后可以用qq命令退出
如果有什么更好的想法的话请告知,谢谢。