调试断点在我系统的所有其他 38 个单元中工作正常。但是,在我的具有 +- 10.000 行的 DataModule 中,delphi 在我按 F9/F8/F7 启动后禁用。在该单元源的任何部分,即使在 OnCreate、SQLConnection.Active:=true 等强制性步骤上也是如此。细节:直到 +- 20 天前都可以正常工作。我正在使用 D7 并且还拥有所有组件来源。谢谢费利佩
6 回答
尝试进行完整构建 (Shift+F9)。如果这不起作用,那么如果您使用以下代码在代码中模拟断点会发生什么?
asm int 3 end;
检查数据模块的源文件的多个副本。有时你认为你正在运行的代码并不是编译器和调试器看到的代码。
接下来,确保您没有使用 {$D-} 或 {$DEBUGINFO OFF} 意外关闭代码中的调试。这可以关闭单个单元的调试信息。
此外,请确保您已在工具|选项|调试器选项中打开集成调试。我知道你说过你可以调试其他地方,但确保集成调试不会以某种方式意外关闭并没有什么坏处。
我发现了这个问题。这是 Delphi7 中的一种奇怪行为,它限制了接口类部分中的字段数量,介于:类型 TDM=class(TDataModule) 和私有部分之间。我删除了一些字段(DataSet Fields(+-40 个字段))并再次运行 degu。我再次添加这些字段,并且调试不运行。我确定这是一个限制,因为我删除了哪些组件字段并不重要。我也尝试了来自不同表的几个字段,添加、测试和删除。很遗憾,但这是真的......感谢您的帮助。
我有一个模糊的记忆,在旧 D7 中调试非常大的文件是错误的。尝试在几个班级中打破你的大单元,并确定你是否可以在你的单元之外进行调试。另一种选择可能是关闭大文件中的调试信息,但要调试的部分除外。值得一试。
不久前,Steve Trefethen发表了一篇博文,解释了一些可能的原因,尽管如果你说你可以调试其他单元,我怀疑它们会适用。
我们在 Delphi 5 中的大型 DataModule 中遇到了同样的问题,不允许我们对其进行调试,并且将其归结为文件太大而无法调试并且 Delphi 不喜欢它。当我们迁移到 Delphi 2007 时,我们可以再次调试它。不知道为什么,没有任何改变(代码方面)。
Felipe,这个单元不允许你在一个被移入或移出内存的 dll 中进行调试吗?我在调试 dll 时发现,如果我在可执行文件中执行某些操作来执行另一个 dll 中的代码或卸载问题单元所在的 dll - Delphi 将禁用所有断点。通常重启 Delphi 并确保在内存中保留问题单元的 dll 的单个实例是解决此问题的唯一方法。
我怀疑大小是问题,因为我有一个定期调试的 17k 行单元。