코드 실행에서 디버깅 중인 애플리케이션에서 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를 실행할 수 있음을 의미합니다("연결" 이벤트 작업과 유사).
CLR이 MDA에서 사용하는 메모리를 재활용할 수 있도록 디버거는 MDANotification
콜백에서 반환된 직후 ICorDebugMDA
인스턴스에 대한 참조를 릴리스해야 합니다. 많은 MDA가 실행 중인 경우 인스턴스를 해제하면 성능이 개선될 수 있습니다.
요구 사항
플랫폼:시스템 요구 사항을 참조하세요.
헤더: CorDebug.idl, CorDebug.h
라이브러리: CorGuids.lib
.NET Framework 버전: 2.0부터 사용 가능
참고 항목
.NET