博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
delphi服务程序(service)的调试方法
阅读量:5798 次
发布时间:2019-06-18

本文共 1733 字,大约阅读时间需要 5 分钟。

hot3.png

delphi服务程序(service)的调试方法        

       

方法一:

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”包含了调试服务的第三种途径,其中涉及到修改注册表设置,您可以参考。

转载于:https://my.oschina.net/u/582827/blog/297184

你可能感兴趣的文章
分享:Backbone.js 样例站点与入门指南
查看>>
图的基本算法
查看>>
HTML基础(一)
查看>>
boost.circular_buffer简介
查看>>
Database Appliance并非Mini版的Exadata-还原真实的Oracle Unbreakable Database Appliance
查看>>
网页图片缩放(js)
查看>>
如何用Fiddler对Android应用进行抓包
查看>>
iOS为所需要的视图添加模糊效果--UIVisualEffectView
查看>>
HDU-1222 Wolf and Rabbit (欧几里得定理)
查看>>
Camera Calibration 相机标定:原理简介(五)
查看>>
ehcache实例
查看>>
python 匿名函数
查看>>
javascript实现-------------选择排序
查看>>
centOS中VMware Tools 安装
查看>>
oracle中以dba_、user_、v$_、all_、session_、index_开头的常...
查看>>
leetcode 116- Populating Next Right Pointers in Each Node
查看>>
spring项目启动错误——java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext...
查看>>
iOS开发网络篇—GET请求和POST请求
查看>>
字典dict
查看>>
游戏名词解释
查看>>