gpt4 book ai didi

delphi - 不正确的循环引用错误

转载 作者:行者123 更新时间:2023-12-03 14:47:30 27 4
gpt4 key购买 nike

我们的团队已经使用 Delphi 6 多年,然后在 2006 年前切换到 Delphi 2。对于这两个版本,我们都存在以下问题:编译器经常提示一个应该递归使用的单元。该单元是一个 40k LOC 单元,是近 100 万 LOC(包括第三方)项目的核心。

错误消息不正确:项目的完整构建始终有效。不幸的是,错误消息并没有告诉我们所谓的循环引用在哪里,只是告诉我们该单元的名称。有时甚至会出现有效的错误消息被列出 2-4 次的情况,直到“找到”循环引用问题。显然编译器在这里是在循环运行。由于该项目的规模,很难手动找到问题。因此,我制作了一个工具,证明确实不存在循环引用(该工具创建单元的有向依赖图并确定该图中的连贯性组件 - 没有循环引用,除非我故意放置一些中)。

这不仅影响 F9 编译,还影响代码完成/洞察力,而代码完成/洞察力在大多数情况下不起作用。有时,当我第二次按 ctrl-space 时它会起作用...

我们有什么想法可以隔离甚至解决问题吗?请注意,将 40k LOC 单元拆分为较小的单元将非常困难,因为它包含大约 15 个大类,这些类在接口(interface)部分中相互依赖(我知道这很糟糕,但无论如何应该可以工作)。

更新
我们不断地重构,但这是一个很难重构的单元,因为几乎一切都依赖于一切。一直试图通过接口(interface)来绕过它,但我们正在讨论一些具有数百个方法和属性的类。而且会更慢。

升级到 D2009 可能是一个选择,但现在我们只能使用 D2006(unicode 内容和价格标签是这里的两个障碍)。无论如何,问题是这是否有帮助,因为问题至少从 D6 就存在了。

关于修剪 use 子句,我们在 Icarus 中经常这样做。但到目前为止这并没有帮助。现在,我们的界面部分已减少至 90 个自定义单元。然而,对于真正的循环引用,问题可能出现在任何单位中。还尝试将所有单位添加到 dpr。

该项目与其他项目共享大量代码,并且存在一些IFDEF。但是,定义不是在项目选项中设置的,而是通过公共(public)包含文件设置的。因此,所有模块都应该看到相同的定义。此外,在完全重建后不久,问题再次出现,而没有切换到另一个项目。

最佳答案

我可能会因此而被否决。在 D2005 年,我有一个 10k loc 单元(数据模块),它完全停止了编译。必须将一些数据集/代码分离到另一个数据模块。那个 10k 单位过去和现在都是一团糟。您确实应该考虑将一些代码重构到其他单元。自 D2005 以来,我的模块/分离变得更糟,但它仍然可以在 D2007 中编译。所以我的答案是 a) 重构和 b) 升级到 D2009。

关于delphi - 不正确的循环引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/903886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com