![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Хочу в своем приложении (используется глобальная обработка ошибок). реализовать их репортинг. Т.е. при возникновении ошибок, чтобы генерировался отчет, что за ошибка произошла (класс ошибки), ее сообщение и в каком модуле и в какой процедуре она произошла. В принципе проблем нет, за исключением того, как узнать, в какой модуле произошла ошибка и в какой процедуре, если как я уже сказал используется глобальный обработчик.
-------------------- |
|||
|
||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: 3 Всего: 22 |
Ну например заведи глобальную переменную и первой строкой каждого модуля или процедуры присваивай ей своё уникальное значение. А потом в обработчике ошибки смотри значение этой переменной. (мож можно как-то ещё, это я с ходу придумал
-------------------- С уважением. Gray. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Вряд ли это возможно.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
Vit, Не, ну уж тут ты не прав... Я тоже как то бился над подобным, но ничего не добился Pegas, если это не комерческая штуковина, то как найдёшь ответ, то скинь плиз алгоритм. Буду очень благодарен -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
в JEDI Code Library есть JclLastExceptStackListToStrings в модуле JclDebug, эта процедура как раз и реализует все выше описаное и, что не очень хорошо, требует включение map файлов, но без этого придется все ручками делать, т.е. заводить таблицу адресов процедур..., что, в принципе, равносильно map файлу
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Спасибо.
-------------------- |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
да, subj. достаточно забавен. с модулем, кстати, елементарно: можно повесить TApplicationEvents и написать
но вот по адресу выцепить метод - задачка нетривиальная. стандартная рутина sysutils.MethodName (ExceptAddr) вернёт пусто, если метод не является published. причём я крупно подозреваю, что это не единственный подводный камень. в большинстве проектов, которые я видел обработка происходит аналогично тому, как сказал gray_k: исключительная ситуация возбуждается руками в блоке try..except с формированием мессага нужного вида. но вот глобально... типа, кинул компонент на форму - и вот оно, щасьте... - это действительно интересно -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Да никто так и не собирается делать...... вы бы вопрос еще раз внимательно почитали..... -------------------- |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
Pegas, я прочитал внимательно. суть в том, чтобы вся логика обработки ошибок была сосредоточена в одном месте, будт то dcu, будь то компонент на форме. и может она быть самой разной, мессага на экран или запись в лог. не придирайтесь
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Ок! Будем жить дружно!
-------------------- |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
x77, посмотри библиотеку Jcl (входит в JVCL). Там делается hook на RaiseException из kernel. Delphi вызывает эту функцию при возникновении исключения, и в этот момент делается снимок call stack'a. Осталось теперь только посчитать сколько вызовов проходит от raise до вызова RaiseException. Только не знаю, чем поможет, например, информация о том, что Index of bound в TList был брошен из Classes. Разве что целиком стек сохранять.
-------------------- Волны гасят ветер... |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
привет
да, я нарыл уже, вернее, люди добрые посоветовали. в JCL есть забавная функция: JclLastExceptStackListToStrings. т.е. делаем JclStartExceptionTracking/JclStopExceptionTracking, включаем TD32 debug info, и в OnException можно получить картинку милого вида: [0047451C] Unit2.TMy.DoIt (Line 60, "Unit2.pas") [00474498] Unit2.TForm2.Button1Click (Line 43, "Unit2.pas") [0044064A] Controls.TControl.Click (Line 4621, "Controls.pas") [00436A07] StdCtrls.TButton.Click (Line 3347, "StdCtrls.pas") [00436B6E] StdCtrls.TButton.CNCommand (Line 3399, "StdCtrls.pas") [0044041F] Controls.TControl.WndProc (Line 4561, "Controls.pas") [00443E96] Controls.TWinControl.WndProc (Line 6242, "Controls.pas") [00436952] StdCtrls.TButtonControl.WndProc (Line 3327, "StdCtrls.pas") [0044012A] Controls.TControl.Perform (Line 4468, "Controls.pas") [00444058] Controls.DoControlMsg (Line 6288, "Controls.pas") [00444835] Controls.TWinControl.WMCommand (Line 6474, "Controls.pas") ..... -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
т.е. ты отслеживаешь не просто, откуда пришёл эксепшн, а всё, что было до его возникновения.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Да, именно так. Об этом в общем-то и говорили. -------------------- Волны гасят ветер... |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
Народ, дайте, плиз, ссылку на JclDebug.
Заранее сенкю -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |