Partager via


FunctionTailcall2 (fonction)

Informe le profileur que la fonction en cours d'exécution va exécuter un appel tail vers une autre fonction et fournit des informations sur le frame de pile.

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

Paramètres

  • funcId
    [in] Identificateur de la fonction en cours d'exécution qui va faire un appel tail.

  • clientData
    [in] Identificateur de fonction remappée, que le profileur a spécifié précédemment via FunctionIDMapper, de la fonction en cours d'exécution actuellement qui va faire un appel tail.

  • func
    [in] Valeur COR_PRF_FRAME_INFO qui pointe vers les informations sur le frame de pile.

    Le profileur doit le traiter en tant que handle opaque qui peut être renvoyé au moteur d'exécution dans la méthode ICorProfilerInfo2::GetFunctionInfo2.

Notes

La fonction cible de l'appel tail utilisera le frame de pile actuelle et retournera directement à l'appelant de la fonction qui a fait l'appel tail. Cela signifie qu'un rappel FunctionLeave2 ne sera pas émis pour une fonction qui est la cible d'un appel tail.

La valeur du paramètre func n'est pas valide après le retour de la fonction FunctionTailcall2, car la valeur peut changer ou être détruite.

La fonction FunctionTailcall2 est un rappel ; vous devez l'implémenter. L'implémentation doit utiliser l'attribut de classe de stockage __declspec (naked).

Le moteur d'exécution n'enregistre aucun registre avant d'appeler cette fonction.

  • À l'entrée, vous devez enregistrer tous les registres que vous utilisez, y compris ceux de l'unité en virgule flottante.

  • À la sortie, vous devez restaurer la pile en dépilant tous les paramètres qui ont fait l'objet d'un push par son appelant.

L'implémentation de FunctionTailcall2 ne doit pas bloquer, car cela diffèrerait le garbage collection. L'implémentation ne doit pas tenter de garbage collection, car la pile n'est peut-être pas dans un état de garbage collection convivial. En cas de tentative de garbage collection, le runtime procède à un blocage jusqu'à ce que FunctionTailcall2 soit retourné.

De plus, la fonction FunctionTailcall2 ne doit pas effectuer d'appels dans du code managé, ni générer de quelque manière que ce soit une allocation de mémoire managée.

Configuration requise

Plateformes : consultez Configuration requise du .NET Framework.

En-tête : Corprof.idl

Bibliothèque : CorGuids.lib

Versions du .NET Framework : 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Voir aussi

Référence

FunctionEnter2 (fonction)

FunctionLeave2 (fonction)

ICorProfilerInfo2::SetEnterLeaveFunctionHooks2, méthode

Autres ressources

Fonctions statiques globales du profilage

Historique des modifications

Date

Historique

Motif

Octobre 2010

Ajouté __stdcall à la syntaxe.

Commentaires client.