Как получить источник исключения в моем обработчике событий Application.OnException?

В Delphi 7, если я поймаю исключение в моем Application.OnException обработчик событий, тогда как мы можем узнать, какая функция или процедура приложения вызвала это необработанное исключение?

Я создал приложение и правильно получаю исключение, но как я могу напечатать имя метода, вызвавшего это исключение?

1 ответ

Это не то, что легко сделать. Вам нужно подключиться к процедурам обработки исключений низкого уровня, чтобы получить надежные трассировки стека. Это очень сложная тема. Требуется обратный инжиниринг библиотеки времени выполнения. Не то, что может быть разумно объяснено подробно в вопросе переполнения стека.

Существует ряд существующих сторонних инструментов, которые предлагают такие возможности: madExcept, EurekaLog и JclDebug. У меня есть только опыт madExcept, который я с энтузиазмом одобряю. Тем не менее, другие труды, по всем параметрам, тоже очень хорошие.

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

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