在Delphi 7中,我如何跟踪编译单元的顺序?

4
我有一个应用程序,它最初是在Turbo Pascal 5中开始的,现在已经迁移到Delphi 7(该项目的根源已经超过20年了)。我们正试图将这个项目迁移到Delphi XE。
有一个单元正在编译成exe文件,但实际上不应该编译到这个项目中。我一直无法正确追踪它是如何进入编译过程的。
是否有日志或其他手段可以用来查看正在编译的单元的顺序,以便我可以追踪这个问题?
注意:我已经尝试使用ICARUS工具进行跟踪,但没有成功。
编辑:我相信如果使用暴力和足够的时间,我可以解决这个问题。我正在寻求更优雅的解决方案(如果有的话)。

2
将该单元移动到某个 IDE 找不到它的地方。编译器可能会在引用它的位置出现问题。 - Sertac Akyuz
问题标题和正文不匹配。顺序无关紧要。搜索您的代码以查找对该单元名称的引用。显然有东西与之相关。您唯一需要的工具是带有搜索功能的编辑器。 - David Heffernan
请参考相关的问题,这里讨论了 Peganza。https://dev59.com/KE7Sa4cB1Zd3GeqPzwKR#2904397 - RobertFrank
@SertacAkyuz:确保无法编译该单元是我尝试的第一件事。当它停止时,无法确定有问题的文件路径。 - Hobo Joe
@DavidHeffernan:我能理解你是如何得出标题和正文不匹配的结论的。但我无法想出更简洁地表达哪些单元导致了编译过程中的这个问题。这条路径确实有一个有序列表,但仅使用“顺序”并不完全符合我的期望。PowerGREP搜索在共同代码中引出了许多单元,这并没有帮助。大约四分之一的单元在十几个不同的产品之间是共同的。 - Hobo Joe
@RobertFrank:我尝试了Peganza的ICARUS部分来解决这个问题,但它没有给我需要的图片来解决这个问题。 - Hobo Joe
4个回答

6
跟踪订单,您可以尝试使用像“进程监视器”这样的工具来监视磁盘I/O。 Delphi本身不记录此类信息。
发现为什么在您的程序中包括该单元有一种更简单的方法。只需删除(或隐藏)该单元。 编译将失败,编译器将指出提到不存在的单元的uses子句。

除了一些集成开发环境的错误,有时候我会这样做,但编译器无法告诉我问题来自哪个单元。 - Jerry Dodge
1
如果我没记错的话,编译器可能会在间接受影响的单元上停止,但仍然说该单元缺失。但我认为这应该可以解决问题。 - Sertac Akyuz
我没有想到过使用进程监视器。这是一个非常有趣的想法,我会去研究一下。至于隐藏单元,如果没有更优雅的解决方案,那就是我心中所想的蛮力方法。我已经编辑了我的问题,以反映更多我所考虑的内容。 - Hobo Joe
这可能是暴力破解,但它也非常简单,并且可能和其他任何方法一样快。 - Rob Kennedy
@RobKennedy:确实,这可能是最好的方法,而且最终也是我选择的方法。只花了几个小时(毒瘤遗留代码),但我希望有更好的解决方案(在这种情况下更好意味着更少的时间)。 - Hobo Joe

1

1
我只能使用Delphi 7的工具来完成这个任务,初步看来,该链接是关于Delphi 2010的。我正在努力适应,但还没有完全适应。有趣的是,单元初始化总是按编译顺序进行吗?没有初始化部分的单元是否总是成为此初始化列表的成员? - Hobo Joe

0

当我在编译中遇到这样的问题时,我会采取以下措施:

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

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

  3. 删除所有DCUS。

  4. 查找所有Windows Vista/Windows 7/Windows8“virtualstore”内容并删除,同时查找任何多余的BPL或DCP并删除。

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

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

这使得查找失败的单元更加容易。


0

将文件系统中所有 .pas 文件的名称更改,并删除所有相应的 DCU 文件。然后构建您的项目。如果使用了某个单元,编译器会发现它。


1
那听起来很熟悉。 - Rob Kennedy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接