【问题标题】:Cannot debug large delphi XE2 application cross platform with Windows XP SP3 target无法使用 Windows XP SP3 目标调试大型 delphi XE2 应用程序跨平台
【发布时间】:2012-03-27 07:38:05
【问题描述】:

我已经使用 XE2(更新 3)完成了我的“远程调试”的第一次设置,在那里我使用了我的大型 650k 行应用程序(在 Win7 中可以正常编译和调试)并发现断点不会在远程中命中模式。一个小型的“hello world”测试项目可以正常工作。我做了以下事情:

  1. 创建了 VMWare Workstation 虚拟机并安装了 Windows XP SP3。
  2. 在 XP 上安装并运行 paServer。
  3. 在 Delphi XE2 中创建了一个指向虚拟机的新远程配置文件。
  4. 点击“测试连接”一切正常。
  5. 右键单击我常用的“调试”构建配置并将新的远程配置文件分配给它。
  6. 在源代码中设置断点。
  7. 构建然后运行。终于看到“部署”后,我看到 EXE 和 RSM 文件被复制到虚拟机上的文件夹中。
  8. 该程序在我的虚拟机上运行良好,但一旦运行开始,断点就会被禁用并且不会被命中。
  9. 如果我删除远程配置文件并在本地运行程序,断点工作正常。

正如我所说,一个小项目就可以了。我的 RSM 文件大约 54M,exe 大约 26M。

我尝试了各种 TDS 文件的开/关组合,包括调试系统 Y/N 都无济于事。有什么方法可以找出调试不可用的原因吗?

【问题讨论】:

    标签: delphi delphi-xe2 breakpoints remote-debugging


    【解决方案1】:

    我没有回答我自己问题的习惯,但经过更多调查后,有一些证据表明这可能是由于我的项目(以及它是 DPROJ)自从 dproj 被引入以来几乎已经通过了几乎所有 Delphi 版本并且它里面的东西正在影响我远程调试的能力。我注意到在一个简单的新 XE2 项目中,某些项目(例如 TDS 文件)在我的项目中没有显示为灰色。我现在已经将我的大型项目 DPR 粘贴到一个新的空 XE2 项目中,从而创建了一个新的 DPROJ,瞧!它在断点处停止。

    哇,这些 dproj 真是一团糟。我习惯于编辑内容以整理出“出错”的版本编号,但我想有时需要一个干净的编号。

    我尽量不要激动,因为我以前见过远程调试不稳定,但我只是想我会发布此信息。

    [完成更多工作] 在部署管理器将文件复制到远程之前,必须确保从本地输出文件夹中删除所有虚假的 *.rsm、*.tds 文件。如果不这样做,远程调试将不起作用。要检查一切是否正常,您只能在目标机器上看到一个 exe 文件,即您的项目 EXE 带有内部调试。应该不存在其他 Delphi 输出符号或映射文件。

    【讨论】:

    • 仅重命名 dproj 文件并打开 .dpr 就足以重置所有内容。
    • @warren - 好主意,但你仍然必须放回搜索和输出路径并关闭“平台符号”等。我现在正试图找到一种方法在dpr 尽可能,例如 MAINICON、清单和每个使用单元的相对路径,以便您的建议尽可能轻松。
    • 听起来像是一个实用程序的好用例,它可能会剥离 DPROJ 的所有内容,但您想要保留的那些位。
    • 你说得对,Warren,删除 dproj 很容易。我记得不久前与 Eric Grange 讨论过 dproj 的无用性。我现在正在探索这个。可以在 DPR 中指定相对文件路径、版本和 MainIcon,并在删除后愉快地读入新的 DPROJ。这对我来说只留下 EXE 和 DCU 输出路径。有没有办法在 DPR 中指定这些以供阅读?我目前看不到使用 OPTSET 文件执行此操作的方法。
    【解决方案2】:

    我与Brian 处于完全相同相同的场景,除了远程调试的应用程序位于Windows 2008 x64 服务器上,从运行Delphi XE2 的i386 XP SP3 调试。我的应用程序大小也相似,一个 42MB .rsm 和一个 28MB .exe。应用程序运行,但断点未激活并在应用程序远程运行时显示为绿色。就像布赖恩一样,在创建/远程调试从头开始创建的新测试 x64 应用程序时,我对断点没有任何问题。在过去的 10 年中,我的不可调试应用程序也经历了各种 Delphi 升级。

    最后,我删除了 .dproj、.dproj.local、.deployproj 并重新加载了 .dpr,但是没有用。正如类似线程中所建议的那样,将调试信息移动到单独的 .tds 文件中不是一种选择,因为这是一个 64 位应用程序。

    我仍在寻找根本原因/解决方案,但如果其他人有同样的问题,他们并不孤单......

    【讨论】:

    • 我采取的导致解决方案的方法是创建一个新的空白“Windows 窗体”应用程序并证明我可以调试它(例如按钮和表单)。当它起作用时,我手动将对我的大应用程序的项目引用添加到这个新的 DPR 中,而不使用搜索路径。即 DPR 中明确引用了所有文件。在这一点上,我发现我可以调试,即它与我的文件无关,只有 DPR/DPROJ 的东西。注意 - 如果这一切正常,您不会获得 RSM - 正常工作我只看到 PAServer 部署的 EXE。确保您使用的是 Update 4 和最新的远程工具
    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 2014-05-11
    • 2011-06-08
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多