![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
andriano |
![]()
Сообщение
#1
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
program Project1; 1. Хочется получить на экран диагностику с указанием строки, в которой произошла ошибка. Например так, как это делает ТМТ: Код RunError #200 (division by zero) Calls stack: ERRORTMT.A [ERRORTMT.PAS(10) at 00000009] ERRORTMT.B [ERRORTMT.PAS(15) at 0000000A] ERRORTMT.ERRORTMT [ERRORTMT.PAS(21) at 0000000A] Return code: 4 Execution time: 0.06 seconds Press any key... 2.Хочется самому получить доступ к отладочной информации. Например, получить в подпрограмме название вызывающей программы. |
![]() ![]() |
Better Kind |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 52 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Обработка исключений try except
Или вы всеже хотите производить декомпиляцию??? -------------------- With best regards, Better Kind
|
andriano |
![]()
Сообщение
#3
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Еще раз: хочу
1. При завершении по ошибке получить посмертный дамп. 2. В вызываемой подпрограмме получать строку с именем вызывающей. |
Malice |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Еще раз: хочу 1. При завершении по ошибке получить посмертный дамп. 2. В вызываемой подпрограмме получать строку с именем вызывающей. Копай в сторону api SetUnhandledExceptionFilter для установки своего обработчика исключений, в нем MiniDumpWriteDump для дампа процесса. По дампу обнаружишь в какой функции крякнуло, по стеку - откуда пришло.. Дизассемблер можно прикрутить любой, благо их полно. Чтобы получить название функций придется самому подготовить такую табличку при старте программы - адрес/название, и потом ее использовать при анализе дампа. Добавлено через 2 мин. ps только это не отладочная информация, а как бы анализ собственными силами. Сообщение отредактировано: Malice - 18.12.2007 13:34 |
andriano |
![]()
Сообщение
#5
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Дело в том, что подавляющее число компиляторов сами составляют такие таблицы и на их основе осуществляют вывод посмертного дампа. Над изготовлением такой таблицы ручками я, разумеется, думал, но эта идея мне не понравлась.
В ТМТ, собственно, я при необходимости получить название вызывающей подпрограммы добываю ее из этой формируемой компилятором таблицы. Хотелось бы иметь возможность делать то же самое из Дельфи. Подключать дизассемблер - и мысли такой не было. Не нужно это. Ладно, "копать" в сторону SetUnhandledExceptionFilter я попробую, но, честно говоря, не верится, что такая функция как посмертный дамп может отсутствовать в мало-мальски серьезном крмпиляторе. Неужели в Дельфях это так? Другое дело, что в любом компиляторе эта функция подключается только при компиляции в отладочном режиме и отключена в основном. Может и Дельфи здесь все-таки следуют стандарту de facto, и эту функцию можно как-то включить? |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 9:47 |