![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Написание обработчика исключительных ситуаций... [D5, Win2k, WinXP]
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 ХХХХХХХХ"
так вот эта инф-ция ХХХХХХХХ дана тебе как раз для того чтобы локализовать строку, в которой произошло исключение данного класса, а не изобретать велосипеды с "деланьем обработчиков"