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

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

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


person Victory    schedule 11.08.2014    source источник


Ответы (1)


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

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

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

person David Heffernan    schedule 11.08.2014