Касательно: _=_Контролирование ошибок_=_

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Касательно: _=_Контролирование ошибок_=_

Сообщение ANDLL » 29.05.2006 (Пн) 18:10

Учитывая, что Amed опять поспешил показать всем что он модератор, и закрыл тему http://bbs.vbstreets.ru/viewtopic.php?t=25811 (вероятно, так и не поняв суть обсуждаемого вопроса), я создам новую тему с продолжением.

Я не умею читать мысли г-на Smith68, но я умею читать топики. Из написанного, я предполагаю, что г-н Smith68 интересовался, как сделать ГЛОБАЛЬНЫЙ перехчватчик ошибок. Т.е. такой, каторый бы срабатывал бы в любом месте программы, даже там, где нету On error statement. Если г-н Smith68 имел ввиду не это, извините.

Однако, тема, кажеться, заслуживает некоторого внимания. Хотелось бы узнать, какие путь для решения подобного вопроса существуют? Есть ли в msvbvm какаято функция, отвечающая, за Error handling. И что если эту функцию как-то перехватить?
Откровенно говоря, подобная ФИЧА была бы весьма кстати... иногда :)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Smith68
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 92
Зарегистрирован: 02.09.2005 (Пт) 19:08
Откуда: Тамбов, Моршанск

Сообщение Smith68 » 29.05.2006 (Пн) 18:31

ANDLL, ну ты завернул...

Я человек совершенно не склонный к гуманитарным наукам. И совершенно не умею писать сочинения. Так что за неясность изложения своего вопроса я прошу прощения.

З.Ы. ANDLL, вы совершенно верно изложили суть моего вопроса.

Так же хотелось добавить: у меня в одном месте программы (при нажатии кнопки) иногда выходит сообщение с кодом "40006" и мне хотелось, чтобы за место рантайма выскакивало более дружественное сообщение.

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

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 29.05.2006 (Пн) 19:52

Вообще-то я бы тоже ту тему закрыл :) Потому как на вопрос ответили полностью аж три раза подряд :) По-моему вполне достаточно. И никакого намека на глобальный перехватчик ошибок я там не увидел. Что автор темы и подтвердил
Smith68 писал(а):у меня в одном месте программы (при нажатии кнопки) иногда выходит сообщение с кодом "40006" и мне хотелось, чтобы за место рантайма выскакивало более дружественное сообщение.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 29.05.2006 (Пн) 19:59

Короче, суть моего вопроса ясна? Может на него то же кто-то ответил?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 29.05.2006 (Пн) 20:01

Насчет глобальности, помниться, как-то обсуждали уже.. Тогда остановились на варианте - во все фунцкии влепить On Error Goto ErrH с последующим вызовом функции обработки ошибки.

Единственный вопрос, на который не нашлось консолидированного ответа - как это лучше сделать.. Я предложил написать программу, которая изменяла бы текст программы, вставляя после "Funсtion..." и "Sub..." строку "On Error...", ну и соответственно - перед "End Function.." и "End Sub" вставляла бы нужный код обработчика.. Но т.к. ловить глобально ошибки - дело редко нужное, программа так и не была написана..

В общем, обсуждать вроде больше нечего..

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

Сообщение alibek » 29.05.2006 (Пн) 20:22

Можно разместить один общий обработчик ошибок в Sub Main. Только в этому случае налагаются определенные требования к построению программы. ИМХО, оно того не стоит.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.05.2006 (Пн) 20:50

alibek писал(а):Можно разместить один общий обработчик ошибок в Sub Main.

Что, и ошибки в обработчиках событий он тоже отловит?
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 29.05.2006 (Пн) 21:00

To tyomitch
alibek писал(а):Можно разместить один общий обработчик ошибок в Sub Main. Только в этому случае налагаются определенные требования к построению программы. ИМХО, оно того не стоит.
Просто требования такие - больше в программе не должно быть никаких функций и процедур и обработчиков событий. :mrgreen:
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

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

Сообщение alibek » 29.05.2006 (Пн) 21:01

А как же.
Код: Выделить всё
Option Explicit

Sub MAIN()
On Error GoTo ErrorHandler
Test1
Test2
Exit Sub

ErrorHandler:
Debug.Print "MAIN -> Error #" & Err.Number & " - " & Err.Description
Resume Next
End Sub

Sub Test1()
On Error GoTo ErrorHandler
Dim A() As Long
A(1) = 1
Exit Sub

ErrorHandler:
Debug.Print "Test1 -> Error #" & Err.Number & " - " & Err.Description
Resume Next
End Sub

Sub Test2()
On Error GoTo ErrorHandler
Dim A() As Long
A(1) = 1
Exit Sub

ErrorHandler:
A(2) = 2
Debug.Print "Test2 -> Error #" & Err.Number & " - " & Err.Description
Resume Next
End Sub


vvs_adm, ошибаешься.
Lasciate ogni speranza, voi ch'entrate.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 29.05.2006 (Пн) 22:15

Использую MZTools + HuntERR

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

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 30.05.2006 (Вт) 8:50

alibek писал(а):Можно разместить один общий обработчик ошибок в Sub Main. Только в этому случае налагаются определенные требования к построению программы. ИМХО, оно того не стоит.


А что можно "ловить" ошибки "NO TRAP" (Извини за язык ассеблер)

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

Сообщение alibek » 30.05.2006 (Вт) 9:07

NIC, а ты их можешь ловить из VB?
Lasciate ogni speranza, voi ch'entrate.

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 30.05.2006 (Вт) 9:13

alibek писал(а):NIC, а ты их можешь ловить из VB?


Alibek В том и дело,что никак!!!

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 30.05.2006 (Вт) 9:22

Может тогда писать прогу на Ассемблере.
Если будет ошибка - тогда повесит всю систему!!! :D :D :D

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

Сообщение alibek » 30.05.2006 (Вт) 9:28

NIC писал(а):Alibek В том и дело,что никак!!!

Тогда к чему этот вопрос?
Ты где-нибудь увидел в моем коде ассемблерные вставки?
Через On Error можно отлавливать только те ошибки, которые отлавливаются VB в рантайме.
Lasciate ogni speranza, voi ch'entrate.

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 30.05.2006 (Вт) 9:44

Может переписать библу MSVBVM60.dll что бы там небыло РУНТАЙМОВ
:D :D :D

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

Сообщение Хакер » 30.05.2006 (Вт) 11:05

(шёпотом) А ведь msvbvm делает MsgBox с ошибкой. Нужно найти это место и копать оттуда...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 30.05.2006 (Вт) 13:06

А ведь msvbvm делает MsgBox с ошибкой

Кажеться, это делает __vbaExceptHandler. Дальше что?
Может тогда писать прогу на Ассемблере.
Если будет ошибка - тогда повесит всю систему!!!
Вы о чем?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.05.2006 (Вт) 14:05

Ни в одном из (пяти) постов NIC-а в этом топике я не увидел смысла :-|
При чём здесь "NO TRAP" и "язык ассеблер"?
Изображение

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

Сообщение Хакер » 30.05.2006 (Вт) 14:15

tyomitch
Я где 5-ый?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot] и гости: 39

    TopList