Delphi调试服务程序的两种方法

近日在做服务项目中总结了两种delphi service调试方法,供大家借鉴:

一、编译指令

这种方法原理就是让服务以普通程序的方式来运行。

首先处理项目文件的单元头(RUNASAPP即为编译指令的条件):

?
1
2
3
4
5
6
uses
{$IFDEF RUNASAPP}
Forms,
{ $ELSE }
SvcMgr,
{ $ENDIF }

在调试的时候,加上RUNASAPP这个条件来编译,在正常发布的时候就把这个条件去掉。
由于要调用服务的ServiceStart方法,所以得定义一个变量:

?
1
2
3
4
{$IFDEF RUNASAPP}
var
b: Boolean ;
{ $ENDIF }

同时,原来的应用程序代码也要改成:

?
1
2
3
4
5
6
7
8
9
Application . Initialize;
Application . CreateForm(TMyservice, MyService);
{$IFDEF RUNASAPP}
MyService . ServiceStart( nil , b);
{ $ENDIF }
Application . Run;
{$IFDEF RUNASAPP}
Readln;
{ $ENDIF }

加Readln的目标是不让ServiceStart完成后,就退出程序。
到此,服务就可以和应用程序一样的,设置断点,按F9后开始调试。

二、依附进程

这种方法的前提是服务能够跑起来(即install并启动成功)。
首先把服务安装并启动,然后在IDE的run菜单中点击”Attach to process…”:

然后点选服务进程即可:

接下来就可以设置断点并调试了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值