다음을 통해 공유


IDebugProgramPublisher2

이 인터페이스를 사용하면 DE(디버그 엔진) 또는 사용자 지정 포트 공급자가 디버깅을 위한 프로그램을 등록할 수 있습니다.

구문

IDebugProgramPublisher2 : IUnknown

구현자에 대한 참고 사항

Visual Studio는 디버깅 중인 프로그램을 등록하도록 이 인터페이스를 구현하여 여러 프로세스에서 디버깅할 때 해당 프로그램이 표시되도록 합니다.

호출자 참고 사항

CLSID_ProgramPublisher를 사용해 COM의 CoCreateInstance 함수를 호출하여 이 인터페이스를 가져옵니다(예제 참조). DE 또는 사용자 지정 포트 공급자는 이 인터페이스를 사용하여 디버그 중인 프로그램을 나타내는 프로그램 노드를 등록합니다.

Vtable 순서의 메서드

이 인터페이스는 다음 메서드를 구현합니다.

메서드 설명
PublishProgramNode DE 및 SDM(세션 디버그 관리자)에서 프로그램 노드를 사용할 수 있도록 합니다.
UnpublishProgramNode 프로그램 노드를 더 이상 사용할 수 없도록 제거합니다.
PublishProgram DE 및 SDM에서 프로그램을 사용할 수 있도록 합니다.
UnpublishProgram 프로그램을 더 이상 사용할 수 없도록 제거합니다.
SetDebuggerPresent 디버거가 있음을 나타내는 플래그를 설정합니다.

설명

이 인터페이스는 DE 및 SDM(세션 디버그 관리자)에서 사용할 수 있는 프로그램 및 프로그램 노드를 제공(즉, "게시")합니다. 게시된 프로그램 및 프로그램 노드에 액세스하려면 IDebugProgramProvider2 인터페이스를 사용합니다. 이것이 Visual Studio에서 프로그램이 디버그 중임을 인식할 수 있는 유일한 방법입니다.

요구 사항

헤더: msdbg.h

네임스페이스: Microsoft.VisualStudio.Debugger.Interop

어셈블리: Microsoft.VisualStudio.Debugger.Interop.dll

예시

이 예제는 프로그램 게시자를 인스턴스화하고 프로그램 노드를 등록하는 방법을 보여 줍니다. 이것은 프로그램 노드 게시 자습서에서 가져온 내용입니다.

// This is how m_srpProgramPublisher is defined in the class definition:
// CComPtr<IDebugProgramPublisher2> m_srpProgramPublisher.

void CProgram::Start(IDebugEngine2 * pEngine)
{
    m_spEngine = pEngine;

    HRESULT hr = m_srpProgramPublisher.CoCreateInstance(CLSID_ProgramPublisher);
    if ( FAILED(hr) )
    {
        ATLTRACE("Failed to create the program publisher: 0x%x.", hr);
        return;
    }

    // Register ourselves with the program publisher. Note that
    // CProgram implements the IDebgProgramNode2 interface, hence
    // the static cast on "this".
    hr = m_srpProgramPublisher->PublishProgramNode(
        static_cast<IDebugProgramNode2*>(this));
    if ( FAILED(hr) )
    {
        ATLTRACE("Failed to publish the program node: 0x%x.", hr);
        m_srpProgramPublisher.Release();
        return;
    }

    ATLTRACE("Added program node.\n");
}

참고 항목