COM+ では、Microsoft Visual Basic 6.0 と MTS を使用したデバッグに関するいくつかの制限事項が削除または削減されます。 次の一覧は、COM+ で期待できる変更をまとめたものです。
複数のコンポーネントのデバッグ - COM+ では、IDE の 1 つのインスタンスで実行されているクライアントが、プロジェクト グループとして別のインスタンスで実行されている任意の数の DLL を呼び出すシナリオをデバッグできます。 グループ化された DLL プロジェクト内のオブジェクトは、必要に応じてコンテキストを流しながら、互いを任意に呼び出すことができます。 もちろん、これは、DLL とクライアントが IDE の同じインスタンス内の同じプロジェクト グループ内にある場合にも機能します。
Class_InitializeイベントとClass_Terminateイベントのデバッグ制限 - COM+ を使用すると、そのコードがオブジェクトまたはその対応するコンテキスト オブジェクトにアクセスしようとした場合でも、COM+ アプリケーション コンポーネントのClass_InitializeおよびClass_Terminateイベントにコードを配置できます。 そこでブレークポイントを設定し、ウォッチを使用できます。 Class_Terminate イベントにブレークポイントを設定することもできます。
回避策として必要なくなりましたが、コンポーネントの起動とシャットダウン中にコードを実行する必要がある場合は、IObjectControl インターフェイスを実装し、Activate および Deactivate メソッドを使用できます。 Deactivate または CanBePooled メソッドのコードに新たにブレークポイントを配置できるようになりました。
MTS オブジェクトの監視 - COM+ を使用すると、COM+ によって返されるオブジェクト変数のウォッチを追加できます。これには、SafeRefからの戻り値、GetObjectContext、IObjectContext::CreateInstanceメソッド含まれます。
コンポーネントが失敗したときの安定性の向上 — COM+ では、コンポーネントの障害によって Visual Basic が常に停止しなくなります (デバッグ対象のコンポーネントと同じプロセスで実行されます)。 たとえば、Just-In-Time (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 = Nothingobj.Test メソッドが IObjectContext::SetCompleteを呼び出した場合、COM+ によって obj はすぐにメモリから解放されますが、obj はまだ Nothing に設定されていません。 obj.Test が戻ったとき、Visual Basic デバッガーは、IProvideClassInfo インターフェイス用に obj に対して QueryInterface を呼び出します。 obj に関連付けられているコンテキスト ラッパーは、QueryInterface 呼び出しにサービスを提供する MyApp.MyClass の新しいインスタンスを作成します。 その結果、この初期化されていないオブジェクトは、obj の後にデバッガーに表示されます。テストが返されました。 このオブジェクトはデバッガーにのみ表示され、obj を Nothing に設定するために後続の命令によって削除されます。
関連トピック