Funzione FunctionTailcall2

Notifica al profiler che la funzione attualmente in esecuzione sta per eseguire una chiamata di coda a un'altra funzione e fornisce informazioni sul frame dello stack.

Sintassi

void __stdcall FunctionTailcall2 (  
    [in] FunctionID         funcId,
    [in] UINT_PTR           clientData,
    [in] COR_PRF_FRAME_INFO func  
);  

Parametri

funcId [in] Identificatore della funzione attualmente in esecuzione che sta per effettuare una chiamata alla coda.

clientData [in] Identificatore di funzione remapped, che il profiler specificato in precedenza tramite FunctionIDMapper, della funzione attualmente in esecuzione che sta per effettuare una chiamata di coda.

func [in] Valore COR_PRF_FRAME_INFO che punta alle informazioni sul frame dello stack.

Il profiler deve trattarlo come handle opaco che può essere passato al motore di esecuzione nel metodo ICorProfilerInfo2::GetFunctionInfo2 .

Commenti

La funzione di destinazione della chiamata finale userà il frame dello stack corrente e restituirà direttamente al chiamante della funzione che ha effettuato la chiamata alla coda. Ciò significa che un callback FunctionLeave2 non verrà emesso per una funzione che è la destinazione di una chiamata alla coda.

Il valore del func parametro non è valido dopo che la FunctionTailcall2 funzione restituisce perché il valore può cambiare o essere eliminato.

La FunctionTailcall2 funzione è un callback. È necessario implementarla. L'implementazione deve usare l'attributo __declspecdella classe di archiviazione (naked).

Il motore di esecuzione non salva i registri prima di chiamare questa funzione.

  • Nella voce è necessario salvare tutti i registri usati, inclusi quelli nell'unità a virgola mobile (FPU).

  • All'uscita, è necessario ripristinare lo stack rimuovendo tutti i parametri che sono stati sottoposti a push dal chiamante.

L'implementazione di FunctionTailcall2 non deve essere bloccata perché ritarderà la Garbage Collection. L'implementazione non deve tentare una Garbage Collection perché lo stack potrebbe non essere in uno stato descrittivo di Garbage Collection. Se viene eseguito un tentativo di Garbage Collection, il runtime blocca fino a quando non viene restituito FunctionTailcall2 .

Inoltre, la FunctionTailcall2 funzione non deve chiamare nel codice gestito o in alcun modo causare un'allocazione di memoria gestita.

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorProf.idl

Libreria: CorGuids.lib

Versioni di .NET Framework: Disponibile da 2.0

Vedi anche