当前位置:  开发笔记 > 开发工具 > 正文

Delphi 7异常未被捕获

如何解决《Delphi7异常未被捕获》经验,为你挑选了2个好方法。

我有一些非常复杂的遗留代码,我一直在研究收集大块数据时的崩溃.我一直无法找到崩溃的确切原因,我正在尝试不同的方法来解决它或至少恢复得很好.我做的最后一件事是将崩溃的代码包含在一个

try
  ...
except
  cleanup();
end;

只是为了使它表现出来.但清理工作永远不会完成.在什么情况下不会发现异常?这可能是由于一些内存溢出或某些东西,因为应用程序正在收集相当多的数据.

哦,我添加之前的例外try是"访问冲突"(还有什么?),CPU窗口指向非常低的地址.任何想法或指针将不胜感激!



1> gabr..:

"非常低的地址"可能意味着有人试图在一个实际上不存在的对象上调用虚方法(即'nil').例如:

的TStringList(无).Clear;

不过,第一部分非常神秘.我不知道怎么会发生这种情况.

我认为你应该尝试使用madExcept捕获该异常.它从来没有让我失望过.(免责声明:我不使用D7.)



2> Barry Kelly..:

丢失的堆栈或堆栈溢出都会对堆栈上的结构造成不可挽回的损害,Windows中的结构化异常处理(SEH)用于查找实际的异常处理程序.

如果堆栈上的缓冲区中存在缓冲区溢出(例如,静态数组作为局部变量但写入超出其结尾),并覆盖异常记录,则可以覆盖指向下一个异常的"下一个"指针记录在堆栈上.如果指针遭到破坏,那么操作系统无法找到下一个异常处理程序并最终到达您的全部异常处理程序.

堆栈溢出是不同的:它们可以完全阻止调用函数,因为每个函数调用都需要至少一个堆栈空间用于返回地址.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有