Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Написание обработчика исключительных ситуаций... [D5, Win2k, WinXP]


Страницы:   1 2

TankMan ©   (2004-11-18 17:50:00) 

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


TankMan   (2004-11-25 19:26:00) [1]

>>KSergey
Да нет почему же, я на диалапе и очень редко и не на долго выхожу поэтому эти 6мб у меня досих пор в закачке висят :(

>>Digitman
а жаль... буду докачивать сегодня JCL Releases и пробовать, я смотрю классный наборчик %)


Digitman   (2004-11-25 15:03:00) [2]


> TankMan ©   (25.11.04 13:36) [31]


видишь ли, не все так просто ...

исключение вполне может возникнуть и в коде загружаемого/используемого тобой сист.модуля, например user32.dll

сам понимаешь - никаких "юнитов" и "номеров строк" в этом случае ждать не приходится, но тем не менее ситуация вполне имеет право на жизнь ... например, из-за того, что где-то в коде своего юнита в какой-то его строке при явном/неявном вызове тобой API-ф-ции сист.модуля ты передал ей некорректный факт.параметр ... исключение же это покажет, что произошло AV и сошлется на адрес, относящийся к образу сист.модуля в АП твоего процесса, но никак не адрес строки твоего собственного Паскаль-кода, передававшего "кривой" параметр, приведший к катастрофе ...


KSergey   (2004-11-25 14:29:00) [3]

> [31] TankMan ©   (25.11.04 13:36)
> "Произошла ошибка доступа в в модуле unit1 строка 25

Про это в первом же ответе написано!!! Неужели нельзя было глянуть?


TankMan   (2004-11-25 13:36:00) [4]

>>Digitman
Ан нет, не разобрался :(, дело в том что ошибка возникает в определенном месте программы, и не с первого раза :(
А вообще реально ли реализовать такой вот обработчик, который при возникновении ошибки в уже откомпилированном ехе, выдавал сообщение что-то типа (в переводе на русский ;) ) "Произошла ошибка доступа в в модуле unit1 строка 25"... Вот... Если мне не изменяет память, я в нескольких игрушках видал сообщение такого типа, при ошибке ... или в дельфи не то?


TankMan   (2004-11-23 19:40:00) [5]

>>Digitman ©   (22.11.04 08:17) [29]
Ах нуда ... спасибо за помощь, я сколько уже на дельфи пишу и не знал :(... стока пароблем было с этим связанных :(, спасибо.


Digitman   (2004-11-22 08:17:00) [6]


> TankMan ©   (22.11.04 07:39) [28]


> это как сделать?


что "сделать" ? найти строчку по адресу ?

для AV - [17]
для всех прочих - [26]


TankMan   (2004-11-22 07:39:00) [7]

>>Digitman ©   (19.11.04 15:14) [22]
>а уж ты как разработчик на своей собственной машине локализуешь строчку в исходниках, соответствующих актуальной клиентской версии, сымитируешь ситуацию и найдешь решение проблемы.
...извините за глупый вопрос, но... а это как сделать? можно на пальцах объяснить на примере? А то я не сталкивался с таким вот :(


KSergey   (2004-11-19 16:48:00) [8]

> [26] Игорь Шевченко ©   (19.11.04 16:43)
> ExceptAddr ?

Ага, спасибо


Игорь Шевченко   (2004-11-19 16:43:00) [9]

KSergey ©   (19.11.04 15:44) [25]

ExceptAddr ?


KSergey   (2004-11-19 15:44:00) [10]

> [24] vuk ©   (19.11.04 15:20)
Для того, чтобы JCLDebug выдал трассировку стека, .map не нужен

Это да, это конечно...
А вот к стати: а где этот адрес (хотя бы последний) взять? Что-то я не подсекаю...


vuk   (2004-11-19 15:20:00) [11]

to KSergey ©   (19.11.04 15:01) [21]:
Кстати о птичках. Для того, чтобы JCLDebug выдал трассировку стека, .map не нужен. В принципе, можно получить от клиента диагностику с трассировкой (понятное дело, что софтина должна выдать это дело в форме, удобной для отсылки багрепорта), а уже потом сделать расшифровщик этой трассировки по .map в удобоваримый вид.


KSergey   (2004-11-19 15:19:00) [12]

> [22] Digitman ©   (19.11.04 15:14)
> образом передать тебе как разработчику этот самый адрес
> а уж ты как разработчик на своей собственной машине локализуешь строчку в исходниках

Хм, надо будет попробовать. Спасибо.


Digitman   (2004-11-19 15:14:00) [13]


> vuk ©   (19.11.04 14:56) [20]


> как оно? Хорошо находит? Сильно помогает? Только честно


мне помогает.
и достаточно часто.
если не сказать - всегда когда этот инструмент применим в данной конкретной ситуации.


> KSergey ©   (19.11.04 15:01) [21]


> Не надо шлангом прикидываться


> Хотелось бы встроить в свою программу пункт меню Search
> -> Find Error


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


KSergey   (2004-11-19 15:01:00) [14]

> [19] Digitman ©   (19.11.04 14:49)
> не понял ... что "такое" ?

Не надо шлангом прикидываться ;)
В упомянутом Вами посте №[18] этобыло указано.

Хотелось бы встроить в свою программу пункт меню Search -> Find Error (только не надо говорить "ну и встраивай", это уже будет не серьезно). Речь, разумеется, о том, как встроить функциональность данного пункта IDE. Опять же хотелось бы без использования jedi и map-файлов. С ними и так все знают ;)


vuk   (2004-11-19 14:56:00) [15]

to Digitman ©   (19.11.04 14:34) [17]:
>меню Search -> Find Error ..
И как оно? Хорошо находит? Сильно помогает? Только честно.
А то, понится, когда сильно надо было, я сколько ни пытался - ни фига не нашло. В отличие от JCLDebug, которым удалось локализовать ошибку сразу, т.к. там еще и трассировка стека имеется.


Digitman   (2004-11-19 14:49:00) [16]


> KSergey ©   (19.11.04 14:45) [18]


> научите меня такое меню встраивать в свою прогу


не понял ... что " такое" ?


KSergey   (2004-11-19 14:45:00) [17]

> [17] Digitman ©   (19.11.04 14:34)
> меню Search -> Find Error ..
> все подробности - в станд.справке.

Ага, у клиента ;) А научите меня такое меню встраивать в свою прогу, плиз...
Только без jedi и map-файлов. С ними - понятно более-менее.


Digitman   (2004-11-19 14:34:00) [18]


> TankMan ©   (19.11.04 14:12) [16]


меню Search -> Find Error ..
все подробности - в станд.справке.


TankMan   (2004-11-19 14:12:00) [19]

... дело в том что я не представляю как эти ХХХХХХ рассматривать и с какой стороны :(
Может стоит наклонить голову и посмотреть на них как на:
><
><
><
><
><
><
Я хочу сказать, а не мог бы раскрыть "секрет", я так думал что это адресс памяти по которому произошла ошибка, а не адрес строки в исходном тексте или что-то подобное...


Digitman   (2004-11-19 14:01:00) [20]


> TankMan ©   (19.11.04 13:56) [14]
> А зачем я тогда спрашиваю?


а я почем знаю, зачем ты спрашиваешь ?

ты хочешб некоей "универсальности" в решении задачи ... а оной нет и быть не может ..

конкретно же про EAccessViolation - ты наверняка не раз видел в сообщении об этом исключении слова вида ".. at address ХХХХХХХХ"

так вот эта инф-ция ХХХХХХХХ дана тебе как раз для того чтобы локализовать строку, в которой произошло исключение данного класса, а не изобретать велосипеды с "деланьем обработчиков"


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо