日期:2014-05-17  浏览次数:21222 次

C# 调试 服务程序,怎么在OnStart 函数里加断点?
protected override void OnStart(string[] args)


 这个函数里,加了断点,,但是启动服务后,断点没有进来...

 在
protected override void OnStop()

 也加了断点,,停止服务时,断点进来了


关键问题是,安装服务后,如不启动服务,,在IDE里,就无法"附加到进程"

这样就导致,一直不能进入 onStart()里

怎么整才能调试 这个函数里的代码?


------解决方案--------------------
这个函数里,加了断点,,但是启动服务后,断点没有进来...

OnStart是服务启动过程触发的,等启动好时,也就意味着这个事件处理结束了
你可以把要测试的东西放到子线程中,类似这样
ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork));

void DoWork()
{
    Thread.Sleep(10000);  //等待一段时间,以便附加进程后,可以命中断点
    断点要测试的代码
    。。。
}
------解决方案--------------------
二楼正解,Start一般只进行服务的启动,,至于执行的任务在启动时新开线程去做。关于调试,我一般都是在解决方案里新建个控制台程序,内容跟服务里的任务一样,调试方便,省得每次去附加进程。