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 __declspec
klasy 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