Udostępnij za pośrednictwem


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 __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

Zobacz też