本文整理自网络,侵删。
近日在做服务项目中总结了两种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 idhashmessagedigest, idhash, idglobal md5
Delphi datamodule1 fdconnection1数据库连接
Delphi “invalid floating point operation.”错误的解决方法
更多相关阅读请进入《Delphi》频道 >>