摘自:MSDN

1.由于服务必须从服务控制管理器的上下文中运行,而不是从 Visual Studio 中运行,因此调试服务不像调试其他 Visual Studio 应用程序类型那样简单。若要调试服务,必须首先启动服务,然后将一个调试器附加到正在运行服务的进程中(AttachToProcess)。

附加到服务的进程使您能够调试大多数服务代码,但并非全部;例如,由于服务已经启动,因此不能用这种方法调试服务的 OnStart 方法中的代码,或调试用于加载服务的 Main 方法中的代码。(不断循环的那块代码当然可以调试,只是不能调试初始化 服务运行环境的 线程的代码,和服务线程中初始化部分代码(初始化代码往往比较短,当然这里可以设置sleep实现增加执行时间的目的); )

2.解决此问题的一个方法是:在唯一作用是帮助调试的服务应用程序中创建一个临时服务。可以将两个服务都安装上,然后启动此“虚拟”服务加载服务进程。临时服务启动了进程后,就可以使用 Visual Studio 中的“调试”菜单来附加到服务进程。当附加该进程之后,可以设置断点并使用这些断点来调试代码。当退出用于附加到该进程的对话框时,实际上已处于调试模式。您可以使用“服务控制管理器”开始、停止、暂停和继续您的服务,因此命中已设置的断点。调试成功后,移除此“虚拟”服务。 (刚开始看的时间一直没看明白,现在初步理解了,就是在一个Solution里面创建再创建一个临时服务项目,将这个项目与要调试的项目一同编译安装到系统服务中(此时有了连个服务A和B),然后先启动临时服务A,并附加到该服务A的进程,此时VS整个Solution进入调试状态了,这就是临时服务的目的了.现在状态下其实VS不仅在监视着服务A进程,而且在此时启动服务B的进程的话VS也会自动地附加上,因此我们可以自由地在任何地方设置断点了,哈哈 ;其实并非一定要是个临时服务项目,只要是个不停执行不会自动结束的项目应该都是可以的,目的就是让VS进入Debug状态,能够自动附加上进程B就可以了 )

3.DbgBreakPoint 或者 DebugBreak(在x86机器上加入一条int 3汇编指令)(相当于在编译后的程序中增加了调试异常,在程序到达断点时会自动跳出即时调试窗口,和普通程序出错时的窗口相似,只要选择调试并选择打开了源码VS进行调试即可,有点像以前开发JS及动态网站用的调试方法,本人认为这种方法最简单可行了,推荐一下 )

注意了:调试 OnStart 方法可能比较困难,因为 Windows 服务管理器将所有尝试启动服务的时间限制在 30 秒内。(这点是Windows固定的时间,估计应该有地方能够修改该限制,不过本人没有找到,有同学找到了告诉俺哈,:-),现在我们做的最好是把初始化服务运行环境的代码尽可能简化,把与服务实际相关的信息初始化,放在服务主函数中执行好了 .否则那你只会有30秒钟时间看前面代码的运行了,如果有自信那么快完成调试的话也可以写前面了,本人能力是不是很足了,囧 )

转载于:https://www.cnblogs.com/dongzhiquan/archive/2010/07/30/1994584.html

Windows服务程序的调试相关推荐

  1. windows 服务程序和桌面程序集成(一)

    本系列文章介绍如何将windows服务程序和桌面程序集成在一起,也就是说一个EXE程序,既可以作为服务程序运行,也可以作为桌面程序运行的双模程序. 在十几年前,曾经给客户开发一套C/S架构的出单程序, ...

  2. vc windows服务程序调试

    最近在编写Windows服务程序,服务程序的启动不像一般的exe程序双击即可运行,它需要通过SCM管理器来启动.所以调试它,在VC中和VS中按F5或者F10都是不行的,这样它启动不起来.而通过SCM管 ...

  3. 用Visual C#创建Windows服务程序

    一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Windows NT.Windows 2000和Windows XP等操作系统下用户环境以外的程序.在以前,编写Wind ...

  4. Visual C#创建Windows服务程序

    转自:http://www.vchome.net/dotnet/dotnetdocs/dotnet38.htm 一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Wind ...

  5. windows服务程序一

    Windows 服务程序简介: Windows服务应用程序是一种需要长期运行的应用程序,它没有用户界面,并且也不会产生任何可视输出.计算机启动时,服务会自动开始运行.Windows服务允许用户创建可在 ...

  6. c#开发Windows服务程序及部署

    Windows服务程序通常是一种在OS的后台长期运行的程序,根据需要你可以设置为随服务器启动而同时启动等等,在传统的C/S结构的程序开发中,Windows服务更是以Server端普遍存在.在.NET应 ...

  7. c#开发Windows服务程序指南

    转载:http://sunday.blog.51cto.com/360410/94315 本文将较为详细的介绍如何在.net下开发Windows服务程序,并将简要介绍一些开发中的调试技巧及后期的部署问 ...

  8. 用C/C++创建windows服务程序

    转载:https://blog.csdn.net/chenyujing1234/article/details/8023816 一.演示过程 下方代码演示了如何使用vs(C/C++)创建windows ...

  9. c语言编写系统服务程序,C语言Windows服务程序编写-ServiceMain

    C语言编写的Windows服务程序,可以类比Linux/Unix环境下的daemon进程. 一下是VS2010环境下的demo: // windows_service.cpp : 定义控制台应用程序的 ...

最新文章

  1. 神经网络到底是如何实现分类的---共振参考系假设
  2. Android面试题详细整理系列(一)
  3. 彻底搞定C指针-函数名与函数指针[转]
  4. http中指定使用worker/prefork
  5. 交易引擎的对账状态为空的处理方式
  6. 前端面试题汇总(jQuery)
  7. 2019南昌网络赛H The Nth Item(二阶线性数列递推 + 广义斐波那契循环节 + 分段打表)题解...
  8. 【语音处理】基于matlab GUI汉宁窗FIR陷波滤波器语音信号加噪去噪【含Matlab源码 1711期】
  9. DMA和IOMMU概念理解
  10. 安装了谷歌服务框架还是闪退_GO谷歌安装器小米专版
  11. cad中计算机的快捷键,CAD常用快捷键汇总
  12. 对于moxie的quot;WebWork教程quot;补充 - [文件上传]
  13. win10熄屏时间不对_详解win10屏幕熄屏时间设置教程
  14. 为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚至破解密码?
  15. android 判断是白天还是晚上,然后设置地图模式
  16. 网易员工入职必学excel课程,妈妈再也不懂担心我做表哥/表姐了!
  17. Bootstrap2和3的区别与选择
  18. AD数模转化AD0809
  19. MHD-20HDMI高清20倍视频会议摄像头
  20. 愿的真心人,白首不相离

热门文章

  1. 牛客网暑期ACM多校训练营(第三场)A - PAXM Team(01背包)
  2. C++ initializer_list 类型详解
  3. C语言 链表实现学生管理系统(含文件读写操作)
  4. PHP传引用/作用域 问题
  5. 2018.12.08 codeforces 939E. Maximize!(二分答案)
  6. Luogu P1782 旅行商的背包
  7. easyui使用时出现这个Uncaught TypeError: Cannot read property 'combo' of undefined
  8. 安全数据分析理念的变化
  9. [网摘]关于产品运营
  10. Jquery 三种方法获取取Checkbox是否选中