组件中我的应用程序中的奇怪错误

时间:2009-01-23 18:31:53

标签: delphi access-violation save-dialog

好的,我的应用程序会完成它所做的所有事情并且它每次都做同样的事情,所以它不像测试那样麻烦。

它崩溃了“somtimes”并非总是如此。当我将鼠标悬停在我最近输出的打开文件对话框中的文件上时,它会这样做。它不会立即等待大约半秒到一秒钟,我知道这就是openfiledialog提供数据,如文件大小和创建时间以及它是什么类型的文档..(标准)鼠标悬停信息..事情这是使用“opendialog”,我没有写这个代码所以这个错误不是我做的是它??????如果它是如何,如果它不是我怎么做什么来阻止它..

错误类型是“地址访问违规”bla ...

打开文件对话框没有过滤器,就像它离开compoent托盘一样,它在我调用“opendialog.execute”后崩溃了

我最初认为它可能仍然在写它但是在我停止应用程序打开任何新文件之后它继续,直到最后一个文件完成了保存过程。

正如我所说,它甚至不会100%一直发生,而且它不是特定于机器的......在3种不同的胜利xp pc上崩溃。

HELP !!

附加;调查结果我可以打开并运行文件,只要我没有在我创建的文件上弹出提示框,一切都很顺利。

4 个答案:

答案 0 :(得分:3)

在表单上删除 TApplicationEvent 组件,并为 OnHint 事件添加事件处理程序。然后在那里放一个断点,看看你是否可以在它崩溃之前打破它(正如你所说,它听起来像是在试图显示提示时崩溃)。然后,您可以使用 debug DCU 进行编译并跟踪并查看它崩溃的内容。

我的猜测是你仍然有文件句柄,文件上可能有独占锁。检查文件句柄,确保正确关闭它们。如果您在程序运行时尝试从记事本中打开其中一个文件,会发生什么?

间歇性行为可能与导致泄漏文件句柄的错误条件上的不同代码路径有关。

祝你好运!

答案 1 :(得分:1)

打开文件对话框基本上是一个资源管理器实例。这意味着您安装的每个shell扩展都会被加载。这样做的一个问题是,一旦你使用打开文件对话框,每个shell扩展也使用你的堆栈来存储变量/返回地址,... 如果您的堆栈不够大,可能会导致崩溃。

尝试增加应用程序的堆栈大小。

答案 2 :(得分:-1)

访问冲突很可能与打开的对话框完全无关。我强烈建议你查看你的代码,并确保你没有覆盖内存边界 - 如果你使用动态数组检查并确保你没有访问其边界之外的元素;如果你手动分配内存也是一样的。

如果您尚未使用FastMM,请使用它。它有一些很好的记忆健全性检查。

答案 3 :(得分:-2)

我建议你将一个调试器附加到进程,并找出究竟是什么导致程序崩溃。 This应该让你开始......