Почему ошибки в классах перехватываются только во время выполнения?

У меня есть класс VB6 с методом, который вызывает ошибку:

Public Sub DoSomething
  ...
  err.Raise 12345, description:="Error message"
  ...
End Sub

Этот метод вызывается из формы:

Public Sub ErrTest()
  On Error Goto err1
  obj.DoSomething
  Exit Sub
err1:
  MsgBox err.Description
End Sub

Это прекрасно работает во время выполнения, но во время разработки обработка ошибок не работает. Вместо этого VB6 IDE отображает стандартное окно сообщений, из которого я могу перейти в режим отладки или завершить программу.

Почему это происходит? Могу ли я предотвратить это?


person Daniel Rikowski    schedule 03.12.2008    source источник


Ответы (2)


В VB IDE перейдите на вкладку «Инструменты», «Параметры», «Общие», «Кадр захвата ошибок». Я предполагаю, что вы установили «Разрыв при всех ошибках», тогда как вы, вероятно, хотите «Разрыв при необработанных ошибках».

Ваш оператор Err.Raise дает мне ошибку компиляции; попробуйте снять брекеты.

Кроме того, вы можете использовать

Err.Raise vbObjectError + 12345, Description:="Error message"

т. е. сместите свой код ошибки из константы VB vbObjectError, чтобы убедиться, что у вас нет конфликтов.

person onedaywhen    schedule 03.12.2008

Вы также можете изменить параметры перехвата ошибок, щелкнув правой кнопкой мыши в окне кода. В подменю «Переключить» доступны следующие параметры:

Перерыв при всех ошибках
Перерыв в модуле класса
Перерыв при необработанных ошибках

Я нахожу это намного проще, чем всплывающее диалоговое окно «Параметры» …

person JeffK    schedule 09.12.2008
comment
Вау, после 10 с лишним лет открытия диалогового окна параметров — жаль, что я не заметил это раньше! - person jm.; 03.01.2009