Перехват ошибки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
net_goose
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 19.01.2009 (Пн) 19:02

Перехват ошибки

Сообщение net_goose » 23.04.2010 (Пт) 11:36

Подскажите пожалуйста можно ли узнать какая процедура вызывает ошибку:

private sub Primer
on error goto Error_Label
...................
...................
exit
Error_Label: msgbox err.number & " " & err.decription & и имя процедуры (в данном случае Primer) можно ли автоматически получить имя процедуры а не писать msgbox err.number & " " & err.decription & "Процедура: Primer"
end sub

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Перехват ошибки

Сообщение MIT » 23.04.2010 (Пт) 11:47

Нельзя.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Перехват ошибки

Сообщение alibek » 23.04.2010 (Пт) 14:26

Но можно использовать add-on (или написать их самому), которые сами расставят обработчики ошибок с указанием метаинформации.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват ошибки

Сообщение Хакер » 23.04.2010 (Пт) 15:35

Более того, даже так, как написал автор, делать нельзя.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Перехват ошибки

Сообщение Antonariy » 23.04.2010 (Пт) 16:01

Хакер писал(а):Более того, даже так, как написал автор, делать нельзя.

В каком смысле? Если не считать синтаксиса?
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват ошибки

Сообщение Хакер » 23.04.2010 (Пт) 16:41

В том смысле, что сколько-нибудь значимо место, где возникла ошибка, а не где она была поймана и обработана (и выведено сообщение).

Поэтому при вывода надо указывать Err.Source, а при возникновении — указывать источник. Вручную, да.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

net_goose
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 19.01.2009 (Пн) 19:02

Re: Перехват ошибки

Сообщение net_goose » 23.04.2010 (Пт) 17:23

alibek писал(а):Но можно использовать add-on (или написать их самому), которые сами расставят обработчики ошибок с указанием метаинформации.


Подскажите пожалуйста что такое add-on, и как "он" работает :oops:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват ошибки

Сообщение Хакер » 23.04.2010 (Пт) 17:41

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Перехват ошибки

Сообщение Antonariy » 23.04.2010 (Пт) 18:10

Хакер писал(а):В том смысле, что сколько-нибудь значимо место, где возникла ошибка, а не где она была поймана и обработана (и выведено сообщение).

Поэтому при вывода надо указывать Err.Source, а при возникновении — указывать источник. Вручную, да.
К сожалению VB6 не обладает конструкцией Try/Catch, чтобы приглядывать за разными опасными местами, а злоупотребления простынями из
Код: Выделить всё
on error resume next
if err.number then
end if
on error goto
вызывают мигрень :shaking:
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват ошибки

Сообщение Хакер » 23.04.2010 (Пт) 18:15

Какая разница обладает или не обладает?

Дерево вызова может иметь сотню процедур, в каждой из которых может возникнуть ошибка. Тем не менее, программа будет всё-время сообщать, что ошибка произошла внутри «Primer», хотя ошибка была где-то в один из ста тех процедур, просто вызванных из Primer.

Вот о чём речь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

net_goose
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 19.01.2009 (Пн) 19:02

Re: Перехват ошибки

Сообщение net_goose » 23.04.2010 (Пт) 18:50

Я просто к чему задал эту тему, ну у меня на форме допустим 5 таймеров через n-ый промежуток они исполняют код пусть простой без вызова дополнительных процедур, ну на пример обращение к БД для проверки пришло ли сообщение и т.д. так вот я ошибся в коде одного из этих таймеров но во всех прописал on error... так вот потом я не мог поймать в каком из них происходит ошибка. пришлось изощрятся и писать msgbox err.number & " " & err.description & "Процедура Timer1' и т.п.
По этому и встал вопрос автоматизации перехвата, жаль что действительно нет try except как в делфях.!

Все равно спасибо за ответы.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Перехват ошибки

Сообщение SLIM » 23.04.2010 (Пт) 22:40

Antonariy писал(а):К сожалению VB6 не обладает конструкцией Try/Catch, чтобы приглядывать за разными опасными местами, а злоупотребления простынями из

Но, по-моему, имеет обертку над ним.

Вообще Хакер прав, как всегда. Нужно всегда ставить Source равным тому, где возникла ошибка.
Я таким образом пишу десятки функций, и устанавливая Source после например метки, на которую перейдем после go to. Источником ставлю как правило имя функции, чтобы знать где искать, но можно и другую информацию.


З.Ы. Вива Хакер...
Пишите жизнь на чистовик.....переписать не удастся.....


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 60

    TopList