| 
    
      
      
        | 盒子资源分类 | 
       
      ![]()  |  
      
        | 
 | 
       
          | 
     | 
    
      
        | 怎样调试delphi写的服务程序-com对象及hook程序(无下载) | 
       
      ![]()  |  
      
        
            
              
                
                  | 关键字:delphi,调试大全 | 
                 
                
                  | 来 自:原创 | 
                 
                
                  | 平 台:Win2k/XP/NT,Win2003 | 
                  下载所需:0 火柴 | 
                 
                
                  | 深浅度:中级 | 
                  完成时间:2010/4/23 | 
                 
                
                  | 发布者:dyydyy  | 
                  发布时间:2010/4/24 | 
                 
                
                  | 编辑器:DELPHI7 | 
                  语  种:简体中文 | 
                 
                
                  | 分 类:应用软件 | 
                  下载浏览:538/18114 | 
                 
                | 
              
                 | 
             
            
              | 
                
                
 
 
	 | 
               
           
          
          
          
          
         |   
          
            
              作者:呆呆(abingle.com)
  我只会用delphi,也深感于delphi的灵气。
  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服务程序就简单和多了。再也不用去附加到进程这种方法了。
  2.调试com对象。
  这种方法网上有介绍,带上。
  打开 run->com/comexp.msc ,新建一应用程序(abcd)
  并将你的com对象加入进来,找到abcd属性->高级,将调试勾上,拷下”D:\Delphi7\Bin\bordbg70.exe” C:\WINDOWS\system32\dllhost.exe /ProcessID:{53342392-DAAE-4542-AC55-2EDA5080671E}
  在delphi调试中,宿主填上那个dllhost.exe ,参数填上/ProcessID:{53342392-DAAE-4542-AC55-2EDA5080671E},好了,现在就可以当作是普通程序来调试了。有的人说要把这个加上project|option|linker|Include TD32 debug info 和Include remote debug symbols打勾,无所谓,不勾也行,不行就勾。
  加上一个小经验,com程序的类,不能在create中下断,看看源代码就知道了,要在init过程中下断哦。
  3.上面其实就是怎样找宿主的问题,所以要灵活运用啊。举一例:上次做了一个hook程序,插入到别的进程中,怎么调试那个插入的dll文件呢?可以,没问题。比如说,用a.exe 插b.dll 到 c.exe中,我们让a.exe 中创建 c.exe,并将a.exe做为宿主,在b.dll.pas中下断,想断哪就断哪。 | 
             
           
		  
          
            
              ![]()  | 
             
           
          
          
            
              | 本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们! | 
             
            
        
          
          
          
            
              |  相关文章 | 
               | 
             
			![]()  |  
            
              | 
			   | 
             
       
          
            
              | 相关评论 | 
             
			![]()  |  
            
              
              
                
                  | 
      共有评论9条
      
      当前显示最后6条评论
      
       | 
                 
                
                
                  | tomcat21 | 
                  2010/5/5 9:56:33 | 
                 
                
                  Delphi带了个例子,在LIb目录上有个ScktSrvr.dpr 有GUI的Service程序,我写Service一般是按照这个方法来做。这样调试起来更方便。 | 
                 
                
                
                  | tigerold | 
                  2010/8/29 12:59:02 | 
                 
                
                  | 服务程序调试,怎么调试啊? | 
                 
                
                
                  | dlfsystem | 
                  2010/9/28 20:54:00 | 
                 
                
                  | 将你的代码写到EXE中RUN,正确后,再COPY到SERVICE中,就可以了 | 
                 
                
                
                  | shangpu114 | 
                  2011/8/9 23:11:41 | 
                 
                
                  | 这方法可以,按这个方法试试. | 
                 
                
                
                  | mike1234567890 | 
                  2012/2/3 13:18:01 | 
                 
                
                  高人啊 我以前都是先设置为普通程序进行编译调试,代码都通过后再改为系统服务运行 | 
                 
                
                
                  | ibetter | 
                  2013/7/31 9:41:19 | 
                 
                
                  | 高 | 
                 
                
                
                  | 我要发表评论 | 
                  查看全部评论 | 
                 
               
                         | 
             
            | 
        |