如何远程调试使用运行时包构建的Win32 VCL应用程序

时间:2012-05-09 06:33:00

标签: delphi delphi-xe2 remote-debugging

我写了一个简单的VCL win32应用程序,其中包含以下代码:

procedure TForm5.Button1Click(Sender: TObject);
begin
  ShowMessage('bingo');
end;

我使用运行时包编译了应用程序,并打开了以下开关:

  1. 调试信息 - >真
  2. 包含远程调试符号 - >真
  3. 断言,调试信息,本地符号,使用调试dcus - >真
  4. 输出包含以下文件:

    1. PROJECT1.EXE
    2. project1.rsm
    3. 两个运行时包是:

      1. vcl160.bpl
      2. rtl160.bpl
      3. 我在Button1Click处理程序中设置了一个断点,如果我运行,本地IDE调试器将停在那里 应用程序在调试器模式下。

        接下来,我想尝试使用运行时包远程调试应用程序。

        我将远程配置文件分配给32位Windows平台。测试连接与远程配置文件一起使用。 PAServer也是在远程机器中启动的。当我尝试使用Delphi XE2 IDE调试器运行应用程序时,我注意到有4个文件被复制到远程机器:

        1. PROJECT1.EXE
        2. project1.rsm
        3. vcl160.bpl
        4. rtl160.bpl
        5. 但是,事件日志显示:

          Module Load: Project1.exe. No Debug Info. Base Address: $00400000. Process Project1.exe (1676)
          

          由于模块没有调试信息,所有断点都将无法触发。

          我已经尝试构建没有运行时包的单个文件.exe应用程序。相同的远程调试器步骤工作,我可以远程调试应用程序。

          使用运行时包构建的应用程序使远程调试失败的原因是什么?

1 个答案:

答案 0 :(得分:1)

看起来您必须另外部署与使用的运行时包相对应的“.dcp”文件。

来自Debugger Notes(XE2发行说明):

  

通过将.dcp文件添加到应用程序来确保调试信息   部署

     

如果您的Delphi应用程序与运行时软件包链接,则为预期的   可能不会生成调试信息。这适用于Mac OS X.   应用程序和远程Win64或远程Win32应用程序。该   解决方法是使用Deployment Manager添加.dcp文件   对应于运行时包列表中的运行时包。对于   例如,如果您使用的是rtl,则必须部署rtl.dcp文件。

     

使用位于Embarcadero \ Rad Studio \ 9.0 \ lib中的.dcp文件   目录,如下:

     
      
  • 对于OS X应用程序:Embarcadero \ Rad Studio \ 9.0 \ lib \ osx \ release
  •   
  • 对于远程64位Windows应用程序:Embarcadero \ Rad Studio \ 9.0 \ lib \ win64 \ release
  •   
  • 对于远程32位Windows应用程序:Embarcadero \ Rad Studio \ 9.0 \ lib \ win32 \ release
  •