Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Powiadamia profilera, że aktualnie wykonywana funkcja ma wykonać wywołanie ogona do innej funkcji i dostarcza informacje o ramce stosu.
Składnia
void __stdcall FunctionTailcall2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func
);
Parametry
funcId [in] Identyfikator aktualnie wykonywanej funkcji, która ma wykonać wywołanie końcowe.
clientData [in] Ponownie zamapowany identyfikator funkcji, który profiler wcześniej określony za pośrednictwem FunctionIDMapper, aktualnie wykonywanej funkcji, która ma wykonać wywołanie końcowe.
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 .
Uwagi
Funkcja docelowa wywołania końcowego będzie używać bieżącej ramki stosu i powróci bezpośrednio do obiektu wywołującego funkcji, która wykonała wywołanie końcowe. Oznacza to, że wywołanie zwrotne FunctionLeave2 nie zostanie wystawione dla funkcji będącej elementem docelowym wywołania końcowego.
Wartość parametru func jest nieprawidłowa, gdy FunctionTailcall2 funkcja zwróci wartość, ponieważ wartość może ulec zmianie lub zostać zniszczona.
Funkcja FunctionTailcall2 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 FunctionTailcall2 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 FunctionTailcall2 powrotu.
FunctionTailcall2 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