次の方法で共有


MTSと比較したCOM+Visual Basicのデバッグサポート

COM+では、Microsoft Visual Basic 6.0およびMTSでのデバッグに関するいくつかの制限が削除または軽減されます。 COM+で期待できる変更の概要を次に示します。

  • 複数のコンポーネントのデバッグ:COM+では、IDEのあるインスタンスで実行されているクライアントが、プロジェクトグループとして別のインスタンスで実行されている任意の数のDLLを呼び出すシナリオをデバッグできます。 グループ化されたDLLプロジェクト内のオブジェクトは、必要に応じてコンテキストをフローしながら、互いに任意に呼び出すことができます。 もちろん、これは、DllとクライアントがIDEの同じインスタンスの同じプロジェクトグループにある場合にも機能します。

  • Class_InitializeイベントとClass_Terminateイベントのデバッグの制限事項:COM+では、コードがオブジェクトまたは対応するコンテキストオブジェクトにアクセスしようとした場合でも、COM+アプリケーションコンポーネントのClass_InitializeイベントとClass_Terminateイベントにコードを配置できます。 そこにブレークポイントを設定し、ウォッチを使用できます。 Class_Terminateイベントにブレークポイントを設定することもできます。

    回避策としては不要になりましたが、コンポーネントのスタートアップとシャットダウンにおいてコードを実行する際にIObjectControlインターフェイスとActivateおよびDeactivateメソッドを従来通り実装できます。 また、DeactivateまたはCanBePooledメソッドのコード内にブレークポイントを設定することもできるようになりました。

  • MTSオブジェクトの監視—COM+では、スチビンGetObjectContextIObjectContext::CreateInstanceメソッドからの戻り値など、COM+が返すオブジェクト変数の監視を追加できます。

  • コンポーネントエラー時の安定性の向上—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 = Nothing
    

    obj.TestメソッドがIObjectContext::SetCompleteを呼び出す場合、COM+は即座にobjをメモリーから解放しますが、objはNothingにはまだ設定されていません。 obj.Testが返されると、Visual BasicデバッガーはIProvideClassInfoインターフェイスのobj上でQueryInterfaceを呼び出します。 objに関連付けられたコンテクストラッパーは、MyApp.MyClassの新しいインスタンスをQueryInterface呼び出しへのサービスのために作成します。 その結果、objの後にデバッガーでこの初期化されていないオブジェクトが表示されます。テストが返されました。 このオブジェクトはデバッガーでのみ表示され、objをNothingに設定する後続の命令によって削除されます。

コンパイルされたVisual Basicコンポーネントのデバッグ

Visual Basic IDEでのデバッグ