在Visual Studio 2008中,调试Windows服务程序的最佳方法是什么?

5

我正在使用Microsoft Log Parser在Windows服务中。该程序在常规网页中运行正常,但当我将代码放入Windows服务中时,它不起作用。我在Windows服务中放置了断点,但当我运行代码时,程序并没有停在断点处。因此,在排除故障的过程中,我已经将问题缩小到了Log Parser软件和Linq。所以,Linq或Log Parser软件可能是造成问题的原因。你们有什么想法吗?

4个回答

5

2

您想要调试OnStart方法吗?如果是这样,您可以使用System.Diagnostics.Debugger.Launch()System.Diagnostics.Debugger.Break()方法,在on start方法运行时有机会附加调试器,否则您将始终无法及时附加调试器。


2

我认为胖猫的建议是正确的,将调试器附加到服务进程上。如果这仍然不起作用,请尝试使用Debug.WriteLineDebugView


2

我过去以许多方式完成这项任务,具体取决于程序运行方式。我认为最简单的方法是在Debugger.Launch()周围使用一个#if DEBUG 预处理器指令, 这样当你构建项目并对其进行优化时,Debugger.Launch()调用将不会编译到程序集中。

我们还有一种方法是使用System.Windows.Forms.MessageBox.Show("attach"),它允许我们在“附加”对话框显示时手动附加到调试器。

最后一种方式是我不喜欢的方式,那就是根据传入的命令行参数更改服务的行为。基本上,当触发特定的参数时,选择不使用ServiceBase.Run启动服务,而是调用一个封装了服务行为/主要功能的类。


1
关于最后一点 - 我相信您也可以检查 Environment.UserInteractive - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接