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


本文整理自网络,侵删。

 

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

 

一、编译指令

 

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

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

 

uses

{$IFDEF RUNASAPP}

Forms,

{$ELSE}

SvcMgr,

{$ENDIF}

在调试的时候,加上RUNASAPP这个条件来编译,在正常发布的时候就把这个条件去掉。

由于要调用服务的ServiceStart方法,所以得定义一个变量:

{$IFDEF RUNASAPP}

var

b: Boolean;

{$ENDIF}

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

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…”:

然后点选服务进程即可:

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

相关阅读 >>

Delphi判断某个程序是否已经启动

Delphi idhashmessagedigest, idhash, idglobal md5

Delphi goto语句用法

Delphi scrollbox1滚动框鼠标滚轮

Delphi 对int64计算的一种处理方式

Delphi datamodule1 fdconnection1数据库连接

Delphi 关于rs485总线通信协议开发注意事项

Delphi xe7检查android蓝牙权限

Delphi 关闭uac 单元

Delphi “invalid floating point operation.”错误的解决方法

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...