Создание NonContinuable исключения в Delphi

У меня есть исключение, которое его raise команда вызывает переполнение стека. Я прочитал эту статью, чтобы узнать, что мне делать: http://www.debuggingexperts.com/modeling-exception-handling

То, что я понял, является исключением 0xc0000025 означает попытку поймать исключение, которое запрещено ловить (EXCEPTION_NONCONTINUABLE_EXCEPTION). Я прав?

Если это так, я хотел бы знать, что является причиной того, что исключение определяется как непродолжительное. Исключение определено в Паскале и получено из Exception объект.

Кроме того, я не смог найти, где обрабатывается это исключение, и добавил сам try-catch блок. Исключение поймано успешно. Зачем?

РЕДАКТИРОВАТЬ

Я хочу объяснить конкретную ситуацию, мне нужна помощь:
Существует код C++, который вызывает код Pascal, который имеет определение исключения, и raise команда происходит в нем.
Прежде чем поставить try-catch блок в коде C++, raise в Паскале вызывает 1000 раз исключение EXCEPTION_NONCONTINUABLE_EXCEPTION пока стек не переполнится.
После того, как я добавил try-catch блок в коде C++, raise в коде Паскаль возвращается к catch блок в коде C++.

Теперь у меня есть 2 вопроса:

  1. Почему процесс не остановился на первом NONCONTINUABLE исключение?
  2. Почему catch блок в коде C++ не вызвал это исключение?

1 ответ

Вы правы, что EXCEPTION_NONCONTINUABLE_EXCEPTION означает, что программа попыталась продолжить работу из исключения, которое не может быть продолжено. Однако в Delphi невозможно определить такое исключение, поэтому источник вашей проблемы находится в другом месте.

Рассмотрите возможность отладки создания, поднятия, перехвата и уничтожения вашего пользовательского типа исключения. Если в вашей программе задействованы внешние библиотеки, в частности, написанные на чем-то отличном от Delphi, убедитесь, что они либо знают, что делать с внешними исключениями, либо полностью защищены от исключений.

Другие вопросы по тегам