FunctionTailcall2 — Funkcja
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 __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 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