Udostępnij za pośrednictwem


FunctionLeave2 — Funkcja

Powiadamia profilera, że funkcja ma wrócić do elementu wywołującego i dostarcza informacje o ramce stosu i zwracanej wartości funkcji.

Składnia

void __stdcall FunctionLeave2 (  
    [in]  FunctionID                        funcId,  
    [in]  UINT_PTR                          clientData,  
    [in]  COR_PRF_FRAME_INFO                func,  
    [in]  COR_PRF_FUNCTION_ARGUMENT_RANGE  *retvalRange  
);  

Parametry

funcId [in] Identyfikator zwracanej funkcji.

clientData [in] Ponownie zamapowany identyfikator funkcji, który profiler został wcześniej określony za pośrednictwem funkcji FunctionIDMapper .

func [in] Wartość wskazująca COR_PRF_FRAME_INFO informacje o ramce stosu.

Profiler powinien traktować to jako nieprzezroczyste dojście, które można przekazać z powrotem do aparatu wykonywania w metodzie ICorProfilerInfo2::GetFunctionInfo2 .

retvalRange [in] Wskaźnik do struktury COR_PRF_FUNCTION_ARGUMENT_RANGE , która określa lokalizację pamięci zwracanej wartości funkcji.

Aby uzyskać dostęp do informacji o wartości zwracanej, należy ustawić flagę COR_PRF_ENABLE_FUNCTION_RETVAL . Profiler może użyć metody ICorProfilerInfo::SetEventMask , aby ustawić flagi zdarzeń.

Uwagi

Wartości parametrów func i retvalRange są nieprawidłowe po FunctionLeave2 powrocie funkcji, ponieważ wartości mogą ulec zmianie lub zostać zniszczone.

Funkcja FunctionLeave2 jest wywołaniem zwrotnym. Należy ją zaimplementować. Implementacja musi używać atrybutu __declspecklasy magazynu (naked).

Aparat wykonywania nie zapisuje żadnych rejestrów przed wywołaniem tej funkcji.

  • Podczas wprowadzania należy zapisać wszystkie używane rejestry, w tym rejestry w jednostce zmiennoprzecinkowe (FPU).

  • Po zakończeniu należy przywrócić stos przez wyskakujące okienko wszystkich parametrów, które zostały wypchnięte przez jego obiekt wywołujący.

Implementacja elementu FunctionLeave2 nie powinna blokować, ponieważ opóźni odzyskiwanie pamięci. Implementacja nie powinna próbować odśmiecać pamięci, ponieważ stos może nie być w stanie przyjaznym dla odzyskiwania pamięci. Jeśli zostanie podjęta próba odzyskiwania pamięci, środowisko uruchomieniowe zostanie zablokowane do momentu FunctionLeave2 powrotu.

FunctionLeave2 Ponadto funkcja nie może wywołać kodu zarządzanego ani w żaden sposób spowodować alokację pamięci zarządzanej.

Wymagania

Platformy: Zobacz Wymagania systemowe.

Nagłówka: CorProf.idl

Biblioteki: CorGuids.lib

wersje .NET Framework: dostępne od wersji 2.0

Zobacz też