FunctionTailcall2- funktion
Meddelar profileraren att den funktion som körs just nu är på väg att utföra ett avslutande anrop till en annan funktion och tillhandahåller information om stackramen.
Syntax
void __stdcall FunctionTailcall2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func
);
Parametrar
funcId
[in] Identifieraren för den funktion som körs just nu och som håller på att göra ett avslutande anrop.
clientData
[in] Den ommappade funktionsidentifieraren, som profileraren tidigare angav via FunctionIDMapper, för den funktion som körs för närvarande och som är på väg att göra ett slutanrop.
func
[in] Ett COR_PRF_FRAME_INFO
värde som pekar på information om stackramen.
Profileraren bör behandla detta som en täckande referens som kan skickas tillbaka till körningsmotorn i metoden ICorProfilerInfo2::GetFunctionInfo2 .
Kommentarer
Slutanropets målfunktion använder den aktuella stackramen och återgår direkt till anroparen för funktionen som gjorde slutanropet. Det innebär att en FunctionLeave2-motringning inte utfärdas för en funktion som är målet för ett slutanrop.
Värdet för parametern func
är inte giltigt när FunctionTailcall2
funktionen returneras eftersom värdet kan ändras eller förstöras.
Funktionen FunctionTailcall2
är ett återanrop. Du måste implementera den. Implementeringen måste använda attributet __declspec
(naked
) storage-class.
Körningsmotorn sparar inga register innan den anropar den här funktionen.
Vid inmatning måste du spara alla register som du använder, inklusive de som finns i flyttalsenheten (FPU).
Vid avslut måste du återställa stacken genom att ta bort alla parametrar som push-överfördes av anroparen.
Implementeringen av FunctionTailcall2
bör inte blockera eftersom det fördröjer skräpinsamlingen. Implementeringen bör inte försöka med en skräpinsamling eftersom stacken kanske inte är i ett eget skräpinsamlingsvänligt tillstånd. Om en skräpinsamling görs blockeras körningen tills FunctionTailcall2
den returneras.
FunctionTailcall2
Funktionen får inte heller anropa till hanterad kod eller på något sätt orsaka en hanterad minnesallokering.
Krav
Plattformar: Se Systemkrav.
Huvudet: CorProf.idl
Bibliotek: CorGuids.lib
.NET Framework versioner: Tillgänglig sedan 2.0