方法一:

1.调试delphi 写的服务程序,有这么一个办法。原来每次都是用attach to process方法,很麻烦。并且按照服务线程的执行线路,可能会停不到想要的断点。笨办法是,在procedure TsvcFrm.ServiceExecute(Sender: TService);中想要下断的语句前加个人定胜天的sleep(20000),但实际上这种办法是主观臆测的。可行,没问题。记得大学时,俺一同学,也会修电视,他的办法是弄个小锤子,四处敲击,没两下就好了,和我用万用表的方法不一样,万用表他根本不会用。而且产生的效益比我的要乐观。毕业了,他回家开个网吧,也算是做IT,而我成了一位对编程颇有研究的IT业余人士,结果他收入还是比我高。日,下辈子,老子扛大炮去修劳力士去。回忆回忆过去,展望展望未来,无限感慨。上面的方法是可以的,如同锤子,仔细了解下服务程序的执行过程,你会发现,用下面的方法,就可以把服务程序当普通程序调试了。

program svcProxy;

uses
  SvcMgr,
  scvmain in ’scvmain.pas’ {svcFrm: TService};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TsvcFrm, svcFrm);
  svcFrm.ServiceExecute(nil);
  //Application.Run;
end.

如上修改dpr文件,就可以直接在serviceexecute过程中下断了,what a good idea. OK ,debug delphi services directly.

调试好了,修改回去,就行了,调试delphi服务程序就简单和多了。再也不用去附加到进程这种方法了。

方法二:

第二种测试服务程序的途径是:安装并运行服务程序,然后将其附加到Delphi 中的运行进程。按照下列步骤,即可在运行服务时调试ServiceApp.exe 程序。

1. 在命令行运行Serviceapp.exe /INSTALL,安装服务程序。

2. 选择Start | Settings | Control Panel | Administrative Tools | Services,将运行Services 小应用程序。找到MyService,然后单击Start Service 工具栏按钮(这些步骤适用于Windows 2000;在Windows NT4.0 中的步骤几乎相同)。

3. 运行Delphi。

4. 装载ServiceApp.dpr 工程。

5. 在Delphi 中选择Run | Attach to Process 菜单项。

6. 在Attach to Process 对话框(如下图所示)中,选中Show System Processes 复选框。

 


7. 找到ServiceApp.exe,然后单击Attach 按钮。

8. 在Delphi 中,对工程源文件的OnExecute 事件方法设置断点,然后按键F9。

图B.3 Attach to Process 对话框可用于将Delphi 调试器附加到已运行的进程上;这对于调试服务程序是很有用的

 Delphi 将把调试器附加到运行的服务程序上,并打开CPU 对话框。除非您阅读汇编语言非常流畅,否则CPU 视图用处不大。但当服务程序运行到断点时,将停止在断点上并切换到Delphi 代码视图。在用户通过Delphi 获取对已运行服务的控制之后,即可像其他程序一样对服务进行步进和调试。

 注意:作为开发者,您应该对自己的PC 具有管理员权限。

Delphi 帮助文档提到,如果权限不足,那么附加到服务进程可能会失败。当只要对PC 拥有管理员权限,附加到运行的服务进程总是工作正常。帮助主题“Debugging Services”包含了调试服务的第三种途径,其中涉及到修改注册表设置,您可以参考。

delphi服务程序(service)的调试方法的更多相关文章

  1. OD调试器调试Delphi程序按钮事件断点方法

    这几天我调试一个Delphi程序,总是无法断点按钮事件,像我这样的菜鸟断点按钮事件真心累啊.所以我分享一下我下断点的经验!希望新手们少走弯路!!   工具/原料   OD调试器 Delphi程序 方法 ...

  2. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  3. Cortex-M3/4的Hard Fault调试方法

    1 Cortex-M3/4的Fault简介 Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址.写只读存储位置等)和非法的程序行为(比如除以0等)等造成的.常见的4种异常及产 ...

  4. 【转】Linux内核调试方法总结

    目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_sta ...

  5. Kubernetes环境下的各种调试方法

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文介绍在Kubernetes环境下的调试方法,希望对读者有用.如果关 ...

  6. VxWorks操作系统shell命令与调试方法总结

    VxWorks下的调试手段 主要介绍在Tornado集成开发环境下的调试方法,和利用支撑定位问题的步骤.思路. 1         Tornado的调试工具 嵌入式实时操作系统VxWorks和集成开发 ...

  7. PEB标记反调试方法

    PEB标记反调试方法 一丶PEB结构简介 PEB.简称进程环境快. 我们在讲DLL隐藏的时候已经说过了. 具体博客链接: https://www.cnblogs.com/iBinary/p/96018 ...

  8. Linux内核调试方法总结

    Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2   ...

  9. .Net Windows Service(服务) 调试安装及System.Timers.Timer 使用

    Windows Service(服务)  是运行在后台的进程 1.VS建立 Windows 服务(.NET Framework) 2.添加Timer 双击Service1.cs可以拖控件(System ...

随机推荐

  1. 【HDOJ】1525 Euclid's Game

    自己想明白的第一道博弈.首先a==b的时候肯定是先手赢: 然后当a>=2*b时,不妨假设a=nb+k, k<b,因此,不论后续怎么博弈,一定可以出现a=k, b=b的情况.因此,无论这个局 ...

  2. java学习之数组排序一:选择排序

    在讲完java中数组定义的两种方式之外,这里需要讲一下对数组常用的方法,第一个就是排序. 加入我们现在有个数组:int[] arr = {12,87,34,3,98,33,103}; 思路1: 1.首 ...

  3. Unity NGUI实现序列帧动画播放

    如题,要实现序列帧的播放导入图片的时候需要注意: (1)图片的命名要连续,如图: (2)将这些图片在NGUI中打包成Altas图集的时候图片应该在同一个Altas中: 这里以播放特效为例,满足条件时播 ...

  4. Javascript之return

    做表单验证的时候,除了错误提示之外,还要做的一点就是避免表单提交. 如果避免表单提交呢? 有一个方法很简单,就是return 我们来看一下代码: $(".make_sure").c ...

  5. Linux Kernel 'dispatch_discard_io()'安全绕过漏洞

    漏洞版本: Linux Kernel 漏洞描述: Bugtraq ID:60414 CVE ID:CVE-2013-2140 Linux是一款开源的操作系统. 由于不充分的检查BLKIF_OP_DIS ...

  6. oracle存储过程 --1

    一,oracle存储过程语法   1.oracle存储过程结构  CREATE OR REPLACE PROCEDURE oracle存储过程名字 (     参数1 IN NUMBER,     参 ...

  7. 【转】java参数传递(超经典)

    原文网址:http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html Java中的参数传递机制一直以来大家都争论不休,究竟是“传值”还是“传址(传引用)” ...

  8. 数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说

    260. [NOI2002] 银河英雄传说 ★★☆   输入文件:galaxy.in   输出文件:galaxy.out   简单对比时间限制:5 s   内存限制:128 MB [问题描述] 公元五 ...

  9. 【动态规划】Codeforces 698A & 699C Vacations

    题目链接: http://codeforces.com/problemset/problem/698/A http://codeforces.com/problemset/problem/699/C ...

  10. 【转】 Linux/Unix 进程间通信的各种方式及其比较

    http://blog.csdn.net/guopengzhang/article/details/5528260 进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问 ...