Тогда будет отловлена только одна ошибка - на второй всё равно будет останов.alibek писал(а):Можно On Error Resume Next и после подозрительных мест проверять Select Case Err
tyomitch писал(а):Тогда будет отловлена только одна ошибка - на второй всё равно будет останов.
Option Explicit
Public Function test()
Dim arr
10030 On Error Resume Next
10050 Debug.Print 6 / 0
10060 Debug.Print Err, Err.Description, "at line " & Erl
10090 Debug.Print arr(1)
10100 Debug.Print Err, Err.Description, "at line " & Erl
10130 Debug.Print 6 / 0
10140 Debug.Print Err, Err.Description, "at line " & Erl
End Function
test
11 Division by zero at line 10050
13 Type mismatch at line 10090
11 Division by zero at line 10130
Option Explicit
Public Function test()
Dim arr
10030 On Error Resume Next
10050 test2
10070 Debug.Print 6 / 0
10080 Debug.Print "test", Err, Err.Description, "at line " & Erl
10100 test2
10120 Debug.Print arr(1)
10130 Debug.Print "test", Err, Err.Description, "at line " & Erl
10150 test2
10170 Debug.Print 6 / 0
10180 Debug.Print "test", Err, Err.Description, "at line " & Erl
10200 test2
End Function
Public Function test2()
Dim arr
10030 On Error Resume Next
10050 Debug.Print 6 / 0
10060 Debug.Print "test2", Err, Err.Description, "at line " & Erl
10090 Debug.Print arr(1)
10100 Debug.Print "test2", Err, Err.Description, "at line " & Erl
10130 Debug.Print 6 / 0
10140 Debug.Print "test2", Err, Err.Description, "at line " & Erl
End Function
?test
test2 11 Division by zero at line 10050
test2 13 Type mismatch at line 10090
test2 11 Division by zero at line 10130
test 11 Division by zero at line 10070
test2 11 Division by zero at line 10050
test2 13 Type mismatch at line 10090
test2 11 Division by zero at line 10130
test 13 Type mismatch at line 10120
test2 11 Division by zero at line 10050
test2 13 Type mismatch at line 10090
test2 11 Division by zero at line 10130
test 11 Division by zero at line 10170
test2 11 Division by zero at line 10050
test2 13 Type mismatch at line 10090
test2 11 Division by zero at line 10130
On Error Goto ErrHandler
Call ErrTrap (Err.Number, Err.Description)
Sub ErrTrap (ByVal ErrNum As Long, Byval ErrDesc As String)
msgbox "Ошибка" & ErrNum & vbCrLf & ErrDesc
End Sub
SetUnhandledExceptionFilter
tyomitch писал(а):Ruslan, для этого есть готовый аддин (правда, ни названия, ни ссылки не помню ).
Идея в нём такая, что он анализирует код процедуры, и все объявленные в ней переменные передаёт в этот глобальный обработчик сплошным списком (как ParamArray). Думаю, такое не сложно написать и самому.
xolod писал(а):Можно конечно извратится с
- Код: Выделить всё
SetUnhandledExceptionFilter
и отлавливать таки все ошибки, но оно тебе надо
Гемморой тот еще...
xfolder писал(а):вчера написал прогу которая обрабатывает все файлы в папке и вставляет вот такой кусочек кода
On Error GoTo EH: GoTo jump
EH: EH 1, "standard: Sub ShowH", Err.Description, Err.Number: Exit Sub
jump:
разумеется имя формы и subа подставляется соотвествующее
хоть код начал нормально смотреться
неужели API перехвата нету
Ruslan Demidow писал(а):tyomitch писал(а):Ruslan, для этого есть готовый аддин (правда, ни названия, ни ссылки не помню ).
Идея в нём такая, что он анализирует код процедуры, и все объявленные в ней переменные передаёт в этот глобальный обработчик сплошным списком (как ParamArray). Думаю, такое не сложно написать и самому.
Мне надо не в IDE, а при работе моей программы.
xfolder писал(а):у меня все ошибки POSTом нa SQL DB в нете сливаются
потом проверяю и исправляю
где взять этот MZ-Tolls 3.0???
google ничего не нашел
xolod писал(а):to Ruslan Demidow
Известно где - в MSDN
tyomitch писал(а):Ruslan Demidow писал(а):tyomitch писал(а):Ruslan, для этого есть готовый аддин (правда, ни названия, ни ссылки не помню ).
Идея в нём такая, что он анализирует код процедуры, и все объявленные в ней переменные передаёт в этот глобальный обработчик сплошным списком (как ParamArray). Думаю, такое не сложно написать и самому.
Мне надо не в IDE, а при работе моей программы.
Так будет всюду - и в IDE, и в скомпилированном
Ftr, я говорил не о MZ-Tools.
Ruslan Demidow писал(а):Я имел ввиду сделать в своей программе такой, скажем глобальный обработчик - что бы например при ошибке в моей программе пользователь мог отослать мне лог со описанием ошибки составленным этим обработчиком, списком переменных и их значениями.
Всю работу по созданию, ведению лога ошибок, занесением в лог названия процедуры в которой произошла ошибка, номера ошибки, описания ошибки, списка переменных, которые используются в этой процедуре и их значений должен вести этот обработчик в моей программе.
А то иногда, пишут, мол типа "Выдаёт ошибку" и всё. Я говорю "Какую ошибку?", а они мне описание ошибки стандартное, типа индекс за пределами массива, или недопустимый вызов функции. И сиди гадай, где произошла ошибка (в какой процедуре, функции), какие значения переменных на момент ошибки? Удручает...
А ведь бывают глюки, которые я не могу воспроизвести стопроцентно... Сколько ни потею - фиг. А у пользователя из другого города (возможно с другого края страны) - на ура, только дыхни на клаву - и оп-па - глюк в моей программе.
Ruslan Demidow писал(а):Где взять ломалку...
tyomitch писал(а):Строку-то фиксированной длины объявил хоть?
tyomitch писал(а):А аддин не помню Но ты правильно понял, о чём идёт речь? Он "препроцессит" код, добавляя во все функции свои обработчики.
marvan писал(а):Ruslan Demidow писал(а):Где взять ломалку...
Дык, не в этом форуме с такими вопросами.
Ломалки для последней версии нет, но она и не нужна.
marvan писал(а):Работает и так, если в проекте не более 10 модулей.
Кроме того, после обработки проекта можно посмотреть сгенерированный код и использовать его фрагменты без VB Watch Protector.
Ruslan Demidow писал(а):tyomitch писал(а):А аддин не помню Но ты правильно понял, о чём идёт речь? Он "препроцессит" код, добавляя во все функции свои обработчики.
Да я понял. Мысль у меня такая - бетатестерам разослать релиз со встроенным глобальным обработчиком, они отошлют мне явные и неявные баги. Я их исправлю и выдам на горА релиз уже без обработчика (если такое возможно конечно же).
marvan писал(а):Ruslan Demidow писал(а):Я имел ввиду сделать в своей программе такой, скажем глобальный обработчик - что бы например при ошибке в моей программе пользователь мог отослать мне лог со описанием ошибки составленным этим обработчиком, списком переменных и их значениями.
Всю работу по созданию, ведению лога ошибок, занесением в лог названия процедуры в которой произошла ошибка, номера ошибки, описания ошибки, списка переменных, которые используются в этой процедуре и их значений должен вести этот обработчик в моей программе.
А то иногда, пишут, мол типа "Выдаёт ошибку" и всё. Я говорю "Какую ошибку?", а они мне описание ошибки стандартное, типа индекс за пределами массива, или недопустимый вызов функции. И сиди гадай, где произошла ошибка (в какой процедуре, функции), какие значения переменных на момент ошибки? Удручает...
А ведь бывают глюки, которые я не могу воспроизвести стопроцентно... Сколько ни потею - фиг. А у пользователя из другого города (возможно с другого края страны) - на ура, только дыхни на клаву - и оп-па - глюк в моей программе.
VB Watch Protector
Программа позволяет добавить в код VB проекта процедуры обработки ошибок. Куча способов.
В первом споcобе, при возникновении ошибки программа предложит прервать выполнение, игнорировать ошибку, попробовать ещё раз или послать отчёт с детальной информацией разработчику. В этом отчёте указывается информация об ошибке, значения переменных и свойства объектов, снимок экрана, информация о пользователе и о системе.
Во втором программа создаёт zip файл, содержащий информацию об ошибке, добавляет информацию в лог файл событий NT и при возможности отправляет эту информацию по почте. При этом пользователю об ошибке не сообщается.
и.т.д.
Сейчас этот форум просматривают: Yandex-бот и гости: 28