Поддержка отладки COM+ Visual Basic в сравнении с MTS
COM+ удаляет или уменьшает несколько ограничений отладки с помощью Microsoft Visual Basic 6.0 и MT. В следующем списке перечислены изменения, которые можно ожидать с помощью COM+:
Отладка нескольких компонентов—в COM+ можно отлаживать сценарии, в которых клиент, работающий в одном экземпляре интегрированной среды разработки, вызывает любое количество DLL, работающих в другой как группа проект. Объекты в сгруппированных проектах DLL могут вызывать друг друга произвольно, передавая контекст по мере необходимости. Конечно, это также работает, если библиотеки DLL и клиент находятся в одной группе проектов в одном экземпляре интегрированной среды разработки.
Ограничения отладки событий Class_Initialize и Class_Terminate — с помощью COM+ можно поместить код в события Class_Initialize и Class_Terminate компонента приложения COM+, в том числе, если этот код пытается получить доступ к объекту или соответствующему объекту контекста. Вы можете задать точки останова там и использовать часы. Вы также можете задать точки останова в событии Class_Terminate.
Хотя он больше не нужен в качестве обходного решения, вы можете реализовать интерфейс IObjectControl и использовать его методы Activate и Deactivate, если необходимо выполнить код во время запуска и завершения работы компонента. Теперь можно поместить точки останова в код для методов Deactivate или CanBePooled.
Наблюдение за объектами MTS— с помощью COM+ можно добавлять наблюдения для переменных объектов, возвращаемых COM+, включая возвращаемые значения из SafeRef, GetObjectContextи методов IObjectContext::CreateInstance.
Повышенная стабильность при сбое компонентов— в COM+, сбой компонента больше не будет останавливать Visual Basic (который выполняется в том же процессе, что и отлаживаемый компонент). Например, поддержка сбоев повторной активации выполнения в режиме JIT теперь позволяет изучить контекст объекта во время отладки.
Отладчик может повторно активировать объекты, освобожденные COM+. Как и в случае с MTS, Visual Basic 6.0 может повторно активировать объекты COM+ во время пошаговой отладки через клиент. Из-за того, как Visual Basic 6.0 обнаруживает сведения об объектах, это ожидаемое поведение. Например, рассмотрим следующий код:
Dim obj As Object Set obj = CreateObject("MyApp.MyClass") obj.Test 'Call the user-defined subroutine named Test. Set obj = Nothing
Если метод obj.Test вызывает IObjectContext::SetComplete, COM+ немедленно освобождает obj из памяти, однако obj еще не установлен в Nothing. Когда obj.Test возвращается, отладчик Visual Basic вызывает QueryInterface на obj для интерфейса IProvideClassInfo. Оболочка контекста, связанная с obj, создает новый экземпляр MyApp.MyClass для обслуживания вызова QueryInterface. В результате, после возврата из obj.Test, этот неинициализированный объект будет отображаться в отладчике. Этот объект отображается только в отладчике и удаляется последующей инструкцией, чтобы задать obj значение Nothing.
Связанные разделы