-3

我有一个异常,它的raise命令导致堆栈溢出。我阅读这篇文章是为了知道我应该怎么做: http: //www.debuggingexperts.com/modeling-exception-handling

我的理解是异常0xc0000025意味着尝试捕获禁止捕获的异常(EXCEPTION_NONCONTINUABLE_EXCEPTION)。我对吗?

如果是这样,我想知道是什么导致异常被定义为不可持续的。异常在 Pascal 中定义并从Exception对象派生。

另外我没找到这个异常处理的地方,自己加了一个try-catchblock。异常捕获成功。为什么?

编辑

我想解释一下我需要帮助的具体情况:
有一个C++代码调用Pascal代码,它有异常定义,raise命令发生在其中。
在我将try-catch块放入 C++ 代码之前,Pascal 中的raisein Pascal 会导致 1000 次异常,EXCEPTION_NONCONTINUABLE_EXCEPTION直到堆栈溢出。
在我try-catch在 C++ 代码中添加块后,raisein Pascal 代码返回到catchC++ 代码中的块。

现在我有两个问题:

  1. 为什么进程没有在第一个NONCONTINUABLE异常时停止?
  2. 为什么catchC++ 代码中的块没有导致此异常?
4

1 回答 1

4

您是正确的, EXCEPTION_NONCONTINUABLE_EXCEPTION 意味着程序试图从一个不可继续的异常继续。但是,在 Delphi 中无法定义这样的异常,因此问题的根源在其他地方。

考虑调试自定义异常类型的创建、引发、捕获和销毁。如果您的程序中涉及到外部库,尤其是任何用 Delphi 以外的东西编写的库,请确保它们知道如何处理外部异常,或者完全不受异常影响。

于 2013-03-12T12:07:46.957 回答