4

我有一个应用程序,它是在 Turbo Pascal 5 中启动的,现在在 Delphi 7 中(该项目的根源已经超过 20 年)。我们正在尝试将此项目移至 Delphi XE。

有一个单元正在编译到 exe 中,根本不应该编译到这个项目中。我一直无法正确追踪它是如何进入编译的。

是否有日志或其他方法可以用来查看正在编译的单元的顺序,以便我可以追查这个问题?

注意:我已经尝试使用 ICARUS 工具完成跟踪但没有成功。

编辑:我确信使用蛮力和足够的时间我可以解决这个问题。如果有可用的解决方案,我正在寻求的是一种更优雅的解决方案。

4

4 回答 4

6

要跟踪顺序,您可以尝试使用 Process Monitor 之类的工具来监控磁盘 I/O。Delphi 本身并不记录这类信息。

不过,要了解为什么要将该单元包含在您的程序中,还有一种更简单的方法。只需删除(或隐藏)该单元。编译将失败,编译器将指向uses提及不存在单元的子句。

于 2013-09-20T22:18:32.120 回答
1

我对问题的回答能否确定我的单位初始化的顺序?可以在这里提供帮助。

它将列出单元的加载顺序,并且很可能之前的单元负责加载它。

于 2013-09-21T11:54:30.903 回答
0

重命名文件系统中所有出现的 .pas 文件并删除所有相应的 DCU 文件。然后构建你的项目。如果使用了,编译器会发现它。

于 2013-09-23T19:07:27.753 回答
0

当我在编译中发现这样的问题时,我会执行以下操作:

  1. 检查 IDE 库路径。删除不必要和无关的目录。

  2. 检查项目搜索路径。删除不必要和无关的目录。

  3. 删除所有 DCUS。

  4. 查找所有 Windows Vista/Windows 7/Windows8“虚拟商店”内容并删除,同时找到任何无关的 BPL 或 DCP,然后删除。

  5. 为不需要的单位创建 UnitAlias。单位别名“UnwantedUnit=GoAway”。

  6. 建造。(在这种情况下,请始终使用 Build,而不是 Compile)

这使得查找发生故障的单元变得更加容易。

于 2013-09-21T19:35:34.010 回答