Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Идеология репортинга ошибок 
:(
    Опции темы
Medved
Дата 4.9.2003, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Хочу в своем приложении (используется глобальная обработка ошибок). реализовать их репортинг. Т.е. при возникновении ошибок, чтобы генерировался отчет, что за ошибка произошла (класс ошибки), ее сообщение и в каком модуле и в какой процедуре она произошла. В принципе проблем нет, за исключением того, как узнать, в какой модуле произошла ошибка и в какой процедуре, если как я уже сказал используется глобальный обработчик.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
gray_k
Дата 4.9.2003, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

Репутация: 3
Всего: 22



Ну например заведи глобальную переменную и первой строкой каждого модуля или процедуры присваивай ей своё уникальное значение. А потом в обработчике ошибки смотри значение этой переменной. (мож можно как-то ещё, это я с ходу придумал smile.gif, если посидеть можно наверно придумать путь поизящней)


--------------------
С уважением.
Gray.
PM MAIL   Вверх
Vit
Дата 4.9.2003, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
altarasjuk
Дата 4.9.2003, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 7.5.2003
Где: Харьков

Репутация: 1
Всего: 1



Цитата
Вряд ли это возможно.

Vit, Не, ну уж тут ты не прав... Я тоже как то бился над подобным, но ничего не добился sad.gif , но видел готовые образцы, которые подрубаются к программе и в случае возникновения ошибки кричат даже строку! (Eureka log), не внося в код никаких своих записей. т.е. в dpr файл подрубается dcu и всё. Но она требует чтобы был включен map файл и другие фиговины. Вот ссылка на демки (~662 КБ)Samples
Pegas, если это не комерческая штуковина, то как найдёшь ответ, то скинь плиз алгоритм. Буду очень благодарен smile.gif.


--------------------
Правда - изобретение маньяков: колет глаза и режет уши.
PM MAIL ICQ   Вверх
stab
Дата 4.9.2003, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



в JEDI Code Library есть JclLastExceptStackListToStrings в модуле JclDebug, эта процедура как раз и реализует все выше описаное и, что не очень хорошо, требует включение map файлов, но без этого придется все ручками делать, т.е. заводить таблицу адресов процедур..., что, в принципе, равносильно map файлу smile.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Medved
Дата 4.9.2003, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Спасибо.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
x77
Дата 4.9.2003, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



да, subj. достаточно забавен. с модулем, кстати, елементарно: можно повесить TApplicationEvents и написать
Код

procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
 E: Exception);
begin
 ShowMessage (e.Message + ' in ' + Sender.ClassName + ' at ' + IntToHex (integer (ExceptAddr), 8));
end;

но вот по адресу выцепить метод - задачка нетривиальная. стандартная рутина sysutils.MethodName (ExceptAddr) вернёт пусто, если метод не является published. причём я крупно подозреваю, что это не единственный подводный камень. в большинстве проектов, которые я видел обработка происходит аналогично тому, как сказал gray_k: исключительная ситуация возбуждается руками в блоке try..except с формированием мессага нужного вида. но вот глобально... типа, кинул компонент на форму - и вот оно, щасьте... - это действительно интересно smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Medved
Дата 5.9.2003, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Цитата(x77 @ 4.9.2003, 23:01)
типа, кинул компонент на форму - и вот оно, щасьте... - это действительно интересно


Да никто так и не собирается делать...... вы бы вопрос еще раз внимательно почитали.....


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
x77
Дата 5.9.2003, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



Pegas, я прочитал внимательно. суть в том, чтобы вся логика обработки ошибок была сосредоточена в одном месте, будт то dcu, будь то компонент на форме. и может она быть самой разной, мессага на экран или запись в лог. не придирайтесь smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Medved
Дата 5.9.2003, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Ок! Будем жить дружно!


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Fantasist
Дата 5.9.2003, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



x77, посмотри библиотеку Jcl (входит в JVCL). Там делается hook на RaiseException из kernel. Delphi вызывает эту функцию при возникновении исключения, и в этот момент делается снимок call stack'a. Осталось теперь только посчитать сколько вызовов проходит от raise до вызова RaiseException. Только не знаю, чем поможет, например, информация о том, что Index of bound в TList был брошен из Classes. Разве что целиком стек сохранять.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
x77
Дата 5.9.2003, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



привет smile.gif

да, я нарыл уже, вернее, люди добрые посоветовали. в 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")
.....


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
x77
Дата 5.9.2003, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



т.е. ты отслеживаешь не просто, откуда пришёл эксепшн, а всё, что было до его возникновения.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Fantasist
Дата 5.9.2003, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
т.е. ты отслеживаешь не просто, откуда пришёл эксепшн, а всё, что было до его возникновения.


Да, именно так. Об этом в общем-то и говорили. smile.gif


--------------------
Волны гасят ветер...
PM MAIL   Вверх
altarasjuk
Дата 12.9.2003, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 7.5.2003
Где: Харьков

Репутация: 1
Всего: 1



Народ, дайте, плиз, ссылку на JclDebug.
Заранее сенкю smile.gif


--------------------
Правда - изобретение маньяков: колет глаза и режет уши.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.