다음을 통해 공유


ICorDebugManagedCallback2::MDANotification 메서드

코드 실행 중 디버깅되고 있는 응용 프로그램에서 MDA(관리 디버깅 도우미)를 발견했음을 알립니다.

HRESULT MDANotification(
    [in] ICorDebugController  *pController,
    [in] ICorDebugThread      *pThread,
    [in] ICorDebugMDA         *pMDA
);

매개 변수

  • pController
    [in] MDA가 발생한 프로세스 또는 응용 프로그램 도메인을 노출시키는 ICorDebugController 인터페이스에 대한 포인터입니다.

    디버거에서는 확인을 위해 인터페이스를 항상 쿼리할 수 있더라도 컨트롤러가 프로세스인지 응용 프로그램 도메인인지에 대해 어떤 가정도 하지 말아야 합니다.

  • pThread
    [in] 디버그 이벤트가 발생한 관리되는 스레드를 노출시키는 ICorDebugThread 인터페이스에 대한 포인터입니다.

    MDA가 관리되지 않는 스레드에서 발견된 경우 pThread 값은 null입니다.

    MDA 개체 자체에서 OS(운영 체제) 스레드 ID를 가져와야 합니다.

  • pMDA
    [in] MDA 정보를 노출시키는 ICorDebugMDA 인터페이스에 대한 포인터입니다.

설명

MDA는 휴리스틱 경고이며 디버깅되고 있는 응용 프로그램을 다시 실행하기 위해 ICorDebugController::Continue를 호출하는 것을 제외하고 어떠한 명시적 디버거 작업도 필요하지 않습니다.

CLR(공용 언어 런타임)에서는 실행된 MDA와 임의의 시점에 특정 MDA에 있는 데이터를 확인할 수 있습니다. 따라서 디버거에서는 특정 MDA 패턴이 필요한 기능을 빌드하면 안 됩니다.

MDA는 큐에 대기 중일 수 있으며 해당 MDA가 발견한 직후에 실행됩니다. 이러한 상황은 런타임에서 MDA를 발견할 때 MDA를 실행하는 것이 아니라 MDA를 실행하기에 안전한 지점에 도달할 때까지 기다려야 하는 경우에 발생합니다. 이는 또한 "연결" 이벤트 작업과 마찬가지로 런타임에서 큐에 대기 중인 콜백의 단일 집합에 있는 여러 개의 MDA를 실행할 수 있음을 의미합니다.

디버거는 CLR에서 MDA에 사용된 메모리를 다시 사용할 수 있도록 MDANotification 콜백에서 반환한 후 즉시 ICorDebugMDA 인스턴스에 대한 참조를 해제해야 합니다. 인스턴스를 해제하면 여러 개의 MDA가 실행될 경우 성능을 향상시킬 수 있습니다.

요구 사항

플랫폼: .NET Framework 시스템 요구 사항 참조

헤더: CorDebug.idl, CorDebug.h

라이브러리: CorGuids.lib

.NET Framework 버전: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

참고 항목

참조

ICorDebugManagedCallback2 인터페이스

ICorDebugManagedCallback 인터페이스

개념

관리 디버깅 도우미를 사용하여 오류 진단