Condividi tramite


Funzione FunctionTailcall2

Notifica al profiler che la funzione attualmente in esecuzione sta per effettuare una chiamata tail a un'altra funzione e fornisce informazioni sullo stack frame.

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 tail.

  • clientData
    [in] Identificatore della funzione di cui è stato modificato il mapping, che il profiler ha specificato in precedenza tramite FunctionIDMapper, della attualmente in esecuzione che sta per effettuare una chiamata tail.

  • func
    [in] Valore COR_PRF_FRAME_INFO che punta alle informazioni sullo stack frame.

    Il profiler dovrà considerarlo come handle opaco che può essere restituito al motore di esecuzione nel metodo ICorProfilerInfo2::GetFunctionInfo2.

Note

La funzione di destinazione della chiamata tail utilizzerà lo stack frame corrente e restituirà i valori direttamente al chiamante della funzione che ha effettuato la chiamata tail. Ciò significa che per una funzione di destinazione di una chiamata tail non verrà generato un callback FunctionLeave2 .

Il valore del parametro func non è valido una volta che la funzione FunctionTailcall2 ha restituito correttamente i valori, in quanto potrebbe cambiare oppure essere distrutto.

La funzione FunctionTailcall2 è un callback; è necessario implementarla. L'implementazione deve utilizzare l'attributo del classe di archiviazione __declspec(naked).

Il motore di esecuzione non salva alcun registro prima di chiamare la funzione.

  • In ingresso, è necessario salvare tutti i registri che si utilizzano, incluso quelli dell'unità a virgola mobile (FPU).

  • In uscita, è necessario ripristinare lo stack recuperando tutti i parametri inseriti dal chiamante.

L'implementazione di FunctionTailcall2 non deve bloccarsi perché ritarderà il Garbage Collection. L'implementazione non deve tentare una Garbage Collection perché lo stack potrebbe non trovarsi in uno stato favorevole per tale operazione. Se viene tentato un Garbage Collection, il runtime si bloccherà fino al completamento di FunctionTailcall2.

Inoltre, la funzione FunctionTailcall2 non deve effettuare una chiamata nel codice gestito o causare in alcun modo un'allocazione della memoria gestita.

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorProf.idl

Libreria: CorGuids.lib

Versioni di .NET Framework: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Vedere anche

Riferimenti

Funzione FunctionEnter2

Funzione FunctionLeave2

Metodo ICorProfilerInfo2::SetEnterLeaveFunctionHooks2

Altre risorse

Funzioni statiche globali di profilatura

Cronologia delle modifiche

Data

Cronologia

Motivo

Ottobre 2010

__stdcall è stato aggiunto alla sintassi.

Commenti e suggerimenti dei clienti.