![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
hug |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 27.7.2007 Репутация: нет Всего: нет |
Есть проектик (немаленький)
написан на Делфях В нем работает вся компания. И с переодичностью у сотрудников возникают ошибки типа "Access Violation..." ну и других типов. Прошу повторить тоже самое, что делали до ошибки. И тут начинает либо все работать, либо уже не помнят что делали. Вот я хочу создать инструмент локализации ошибок. Наверно идеальным вариантом было бы имя функции программы, где случилась ошибка. Пока мои идеи на уровне записи цепочки вызова функций в некий лог файл. Чтобы я потом пришел и увидел form1->f1() class2->f2() form2->f3() ERROR и понял что наверно ошибка где то в f3. Ну или просто увидел что делали пользователи. Я думаю, что это реально (WinApi), но даже не представляю в каком направлении копать. Может кто уже сталкивался с этим или с данной проблемой Интересны Ваши варианты решения отлова ошибок ну и конкретно мнения насчет идеи записи. |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
самое простое это использовать модуль из jcl jclexcept с включенным "jcl DebugInformation".
в модуле обращаем внимание на функции :
если нужно на API, то не очень сложно и разобрать в перехвате KernelException(джидаи его и использовали), но стэка вызовов, имя модуля и т.д. ты не получишь без спец дебуг информации. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
||||
|
||||
vinvin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 30.1.2007 Репутация: нет Всего: 1 |
Можно сделать все самому без дополнительных элементов. Так, как это сделано в NET.
Там в классе исключения есть поле, где храниться указательна предыдущее исключение, ну, то .есть исключение во вложенной процедуре. Таким образом в верхней процедуре можно получить всю цепочку, т.е. все исключения до самого низа. Но там информация о сборке (модуле по нашему) храниться в классе исключении, а у нас в - нет. Поэтому можно сделать следущее: - создать свой класс Исключения в котором добавить поле типа исключения и поле для имени функции (процедуры). -во вложенных процедурах делать обработку исключения - генерировать свой класс исключения и с помощью Raise отправлять на уровень выше - ну а на самом верху делать написать обработчик исключений, который может, например, разбирать всю цепочку - проверять назначено в поле дочернее исключение или нет с помощью Assigned. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |