无法使用 Windows XP SP3 目标调试大型 delphi XE2 应用程序跨平台

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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 和最新的远程工具

以上是关于无法使用 Windows XP SP3 目标调试大型 delphi XE2 应用程序跨平台的主要内容,如果未能解决你的问题,请参考以下文章

应用程序无法加载 XP SP3 和与 comctl32 相关的清单

在 C# 中为 Windows 7 和 Xp Sp3 控制 Windows 防火墙

如何使用 C# 或免费 XP 工具卸载或删除 Windows XP Sp3 游戏?

Windows XP SP3环境下如何关闭WFP(windows file protection)功能

xp sp3原版安装程序下载地址

番茄花园 Windows XP Pro SP3 V 1.1 的KEY