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

Cha*_*ang 5 delphi remote-debugging delphi-xe2

我写了一个简单的VCL win32应用程序,它具有以下代码:

procedure TForm5.Button1Click(Sender: TObject);
begin
  ShowMessage('bingo');
end;
Run Code Online (Sandbox Code Playgroud)

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

  1. 调试信息 - > true
  2. 包括远程调试符号 - > true
  3. 断言,调试信息,本地符号,使用debug dcus - > true

输出包含以下文件:

  1. PROJECT1.EXE
  2. project1.rsm

两个运行时包是:

  1. vcl160.bpl
  2. rtl160.bpl

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

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

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

  1. PROJECT1.EXE
  2. project1.rsm
  3. vcl160.bpl
  4. rtl160.bpl

但是,事件日志显示:

Module Load: Project1.exe. No Debug Info. Base Address: $00400000. Process Project1.exe (1676)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ser*_*yuz 1

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

来自调试器注释(XE2 的发行说明):

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

如果您的 Delphi 应用程序与运行时包链接,则可能不会生成预期的调试信息。对于 Mac OS X 应用程序以及远程 Win64 或远程 Win32 应用程序来说都是如此。解决方法是使用部署管理器添加与运行时包列表中的运行时包对应的 .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