FunctionEnter2 함수

컨트롤이 함수에 전달되고 있음을 프로파일러에 알리고 스택 프레임 및 함수 인수에 대한 정보를 제공합니다. 이 함수는 FunctionEnter 함수를 대체합니다.

구문

void __stdcall FunctionEnter2 (  
    [in]  FunctionID                       funcId,
    [in]  UINT_PTR                         clientData,
    [in]  COR_PRF_FRAME_INFO               func,
    [in]  COR_PRF_FUNCTION_ARGUMENT_INFO  *argumentInfo  
);  

매개 변수

funcId [in] 컨트롤이 전달되는 함수의 식별자입니다.

clientData [in] 프로파일러가 이전에 FunctionIDMapper 함수를 사용하여 지정한 다시 매핑된 함수 식별자입니다.

func [in] 스택 프레임에 대한 정보를 가리키는 COR_PRF_FRAME_INFO 값입니다.

프로파일러는 이를 ICorProfilerInfo2::GetFunctionInfo2 메서드에서 실행 엔진으로 다시 전달할 수 있는 불투명 핸들로 처리해야 합니다.

argumentInfo [in] 함수 인수의 메모리에 있는 위치를 지정하는 COR_PRF_FUNCTION_ARGUMENT_INFO 구조체에 대한 포인터입니다.

인수 정보에 액세스하려면 COR_PRF_ENABLE_FUNCTION_ARGS 플래그를 설정해야 합니다. 프로파일러는 ICorProfilerInfo::SetEventMask 메서드를 사용하여 이벤트 플래그를 설정할 수 있습니다.

설명

funcargumentInfo 매개 변수의 값은 값이 변경되거나 제거될 수 있으므로 FunctionEnter2 함수가 반환된 후에는 유효하지 않습니다.

FunctionEnter2 함수는 콜백이며, 구현해야 합니다. 구현은 __declspec(naked) 스토리지 클래스 특성을 사용해야 합니다.

실행 엔진은 이 함수를 호출하기 전에 레지스터를 저장하지 않습니다.

  • 입력 시 FPU(부동 소수점 유닛)의 레지스터를 포함하여 사용하는 모든 레지스터를 저장해야 합니다.

  • 종료 시 호출자가 푸시한 모든 매개 변수를 제거하여 스택을 복원해야 합니다.

가비지 수집이 지연되므로 FunctionEnter2 구현을 차단해서는 안 됩니다. 스택이 가비지 수집 친화적 상태가 아닐 수 있으므로 구현에서 가비지 수집을 시도해서는 안 됩니다. 가비지 수집이 시도되면 런타임은 FunctionEnter2가 반환될 때까지 차단됩니다.

또한 FunctionEnter2 함수는 관리 코드를 호출하거나 어떤 식으로든 관리 메모리 할당을 유발해서는 안 됩니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: CorProf.idl

라이브러리: CorGuids.lib

.NET Framework 버전: 2.0부터 사용 가능

참고 항목