Structures d'informations de déroulement chaînées

Si l'indicateur UNW_FLAG_CHAININFO est défini, une structure d'information sur le déroulement constitue un indicateur secondaire, et le champ d'adresse partagé du gestionnaire d'exceptions/des informations chaînées contient les informations de déroulement principales.Le code suivant extrait les informations de déroulement principales, en supposant que unwindInfo est la structure dont l'indicateur UNW_FLAG_CHAININFO est défini.

PRUNTIME_FUNCTION primaryUwindInfo = (PRUNTIME_FUNCTION)&(unwindInfo->UnwindCode[( unwindInfo->CountOfCodes + 1 ) & ~1]);

Les informations chaînées sont utiles dans deux situations.En premier lieu, elles peuvent être utilisées pour les segments de code non contigus.En utilisant des informations chaînées, vous pouvez réduire la taille des informations de déroulement requises, étant donné que vous n'avez pas à dupliquer le tableau de codes de déroulement de l'info de déroulement principale.

Vous pouvez également utiliser des informations chaînées pour grouper des sauvegardes de registre non rémanentes.Le compilateur peut différer l'enregistrement de certains registres volatiles jusqu'à ce qu'il soit en dehors du prologue d'entrée de la fonction.Vous pouvez enregistrer ceci en collectant des informations de déroulement principales pour la partie de la fonction avant le code groupé, puis en définissant les informations chaînées avec une taille de prologue non nulle, où les codes de déroulement dans les informations chaînées reflètent les enregistrements des registres non volatiles.Dans ce cas, les codes de déroulement sont toutes les instances de UWOP_SAVE_NONVOL.Un regroupement qui stocke les registres non-volatiles à l'aide d'une TRANSMISSION DE TYPE PUSH ou de modifier le registre de RSP à l'aide d'une allocation de piles fixe supplémentaire n'est pas pris en charge.

Un élément UNWIND_INFO pour lequel UNW_FLAG_CHAININFO est défini peut contenir une entrée RUNTIME_FUNCTION comportant un élément UNWIND_INFO dont la valeur NW_FLAG_CHAININFO est également définie (rétraction multiple).Pour terminer, les pointeurs de l'info de déroulement chaînés arriveront à un élément UNWIND_INFO dont UNW_FLAG_CHAININFO a été effacé ; il s'agit de l'élément UNWIND_INFO principal qui pointe sur le point d'entrée de procédure réel.

Voir aussi

Référence

Données de déroulement pour la gestion des exceptions et la prise en charge du débogueur