【发布时间】:2012-06-07 01:49:28
【问题描述】:
当我打开一个表单时,我突然收到一条错误消息:
"错误读取表格:'X'"
缓存未初始化。必须先调用 TCache.Initialise。忽略错误并继续?注意:忽略错误可能会导致组件被删除或属性值丢失”
“缓存未初始化”位是我们的一个类引发的异常。
我的第一个问题是,为什么 Delphi IDE 运行我的代码而没有我要求它“运行程序”?它运行什么代码?有什么办法可以关闭吗?
其次,有什么方法可以在调试器中捕获此错误,以便找出此异常在调用堆栈中发生的位置?我尝试在抛出异常的地方设置断点,但 Delphi 忽略了它。
而且,一旦我确定了这个异常的来源,有没有办法告诉我何时处于“设计模式”而不运行该代码,或者运行不同的代码?或者更好的是,如果在设计模式下根本不运行该代码? [更新:请参阅 Francois 对如何停止在设计模式下运行代码的回答。]
【问题讨论】:
-
IDE 没有运行您的代码,它在读取 .dfm 时遇到了一个它不知道的组件。
-
对不起,如果我的问题不清楚。 IDE 正在显示我编写的代码引发的异常的文本。除非有一些内存损坏,否则该代码必须在某处运行。
-
那么,您的代码在设计时包中。必须运行您的代码才能实例化您的组件以进行设计。我知道的唯一调试方法是使用 IDE 的另一个实例来调试 IDE。
-
您描述的错误(“忽略错误并继续?`)正如@Sertac 所说的两次,因为 IDE 正在加载 .DFM 并且无法创建它的组件之一遇到(或发现缺少存储在 .DFM 中的某些属性的设计时包的不同版本)。它应该准确地告诉您该属性是什么,但您在错误消息的引用中省略了该属性。如果你不知道它在哪里,张贴错误对话框的屏幕截图。(包含组件的设计时包在设计时在 IDE 中执行。)
-
好的。所以你知道问题在于初始化
TCache。它是表单上的组件(还是表单上的组件包含的组件)?这是由 DFM 中的流式传输引起的错误,您知道涉及哪个类。在记事本或其他文本编辑器中打开 .DFM,查看TCache或包含它的组件所在的位置。当表单被流入时,TCache的一个实例正在被创建,并且正在发生的事情没有以正确的顺序调用它的方法。它是什么? (从这里我看不到TCache,所以我猜不出来。)
标签: delphi delphi-2010