在设计模式下排除运行时异常

时间:2012-06-07 01:49:28

标签: delphi delphi-2010

当我打开表单时,我突然收到一条错误消息:

  

“阅读表单错误:'X'”

     

缓存未初始化。必须先调用TCache.Initialise。忽略错误并继续?注意:忽略该错误可能导致组件被删除或属性值丢失“

“Cache not initialised”位是我们其中一个类引发的异常。

我的第一个问题是,为什么Delphi IDE在没有我要求“运行程序”的情况下运行我的代码?它运行的代码是什么?有什么办法可以解决这个问题吗?

其次,有没有什么办法可以在调试器中捕获这个错误,所以我可以找出调用堆栈中发生此异常的位置?我已经尝试在抛出异常的地方放置一个断点,但Delphi忽略了它。

而且,一旦我找到了这个异常的来源,有没有办法告诉我什么时候处于“设计模式”而不运行该代码,或运行不同的代码?或者甚至更好,如果在设计模式下,根本不运行该代码? [更新:请参阅Francois关于如何在设计模式下停止代码运行的答案。]

2 个答案:

答案 0 :(得分:4)

您有一些组件代码,您在IDE尝试加载dfm时执行该代码。

如果您的组件处于“设计模式”

,则可以在代码中进行测试
  if (csDesigning in ComponentState) then

答案 1 :(得分:4)

当IDE加载DFM时,它会在表单设计器中创建活动对象,这意味着组件运行时代码实际上是在IDE中运行的。因此,如果组件代码想要在设计时跳过其代码的运行部分,则需要检查TComponent.ComponentState属性csDesigning标志。