Spécification des propriétaires de modules et de fonctions
Les extensions !analyze et !owner utilisent un fichier nommé triage.ini pour déterminer le propriétaire des symboles rencontrés par le débogueur.
Lorsque vous utilisez ces extensions, les identités du propriétaire de la fonction ou du module s’affichent après le mot « Suivi ».
Le fichier triage.ini est un fichier texte qui se trouve dans le sous-répertoire \triage de votre installation Outils de débogage pour Windows. Un exemple de fichier triage.ini est inclus dans le package Outils de débogage pour Windows.
Avertissement Si vous installez une version mise à jour des Outils de débogage pour Windows dans le même répertoire que la version actuelle, elle remplace tous les fichiers de ce répertoire, y compris triage.ini. Après avoir modifié ou remplacé l’exemple de fichier triage.ini, enregistrez une copie de celui-ci dans un autre répertoire. Après avoir réinstallé les débogueurs, vous pouvez copier les triage.ini enregistrées sur la version par défaut.
Format du fichier triage.ini
Bien que le fichier triage.ini soit destiné à vous aider à déterminer le propriétaire d’une fonction qui s’est décomposée dans le débogueur, les chaînes « propriétaire » de ce fichier peuvent être tout ce qui peut vous aider à déboguer. Les chaînes peuvent être des noms de personnes qui ont écrit ou tenu à jour le code. Ou bien, les chaînes peuvent être de courtes instructions sur ce que vous pouvez faire lorsqu’une erreur se produit dans un module ou une fonction.
Chaque ligne de ce fichier a la syntaxe suivante.
Module[!Function]=Owner
Vous pouvez ajouter un astérisque (*) uniquement à la fin d’un nom de module ou de fonction. S’il apparaît ailleurs, il est interprété comme un caractère littéral.
Vous ne pouvez pas ajouter d’espaces dans la chaîne de propriétaire. S’il existe des espaces dans la chaîne de propriétaire, ils sont ignorés.
Pour plus d’informations sur les options de syntaxe, consultez Syntaxe triage.ini spéciale.
Les exemples suivants illustrent un exemple de fichier triage.ini.
module1=Person1
module2!functionA=Person2
module2!functionB=Person3
module2!funct*=Person4
module2!*=Person5
module3!singleFunction=Person6
mod*!functionC=Person7
Triage.ini et !owner
Lorsque vous passez un nom de module ou de fonction à l’extension !owner , le débogueur affiche le mot « Suivi » suivi du nom du propriétaire du module ou de la fonction.
L’exemple suivant utilise l’exemple de fichier triage.ini précédent.
0:000> !owner module2!functionB
Followup: Person3
Selon le fichier, « Person3 » possède module2 !functionB, et « Person4 » possède module2 !funct\. Ces deux chaînes correspondent à l’argument passé à !owner. La correspondance la plus complète est donc utilisée.
Triage.ini et !analyze
Lorsque vous utilisez l’extension !analyze , le débogueur examine la trame défaillante supérieure dans la pile et tente de déterminer le propriétaire du module et de la fonction dans ce frame. Si le débogueur peut déterminer le propriétaire, les informations de propriétaire s’affichent.
Si le débogueur ne peut pas déterminer le propriétaire, le débogueur passe à l’image de pile suivante, et ainsi de suite, jusqu’à ce que le débogueur détermine le propriétaire ou que la pile soit complètement examinée.
Si le débogueur peut déterminer le propriétaire, le nom du propriétaire s’affiche après le mot « Suivi ». Si le débogueur effectue une recherche dans toute la pile sans trouver d’informations, aucun nom n’est affiché.
L’exemple suivant utilise l’exemple de fichier triage.ini fourni plus haut dans cette rubrique.
Supposons que le premier cadre de la pile soit MyModule !someFunction. Le débogueur ne trouve pas MyModule dans le fichier triage.ini. Ensuite, il passe au deuxième frame sur la pile.
Supposons que la deuxième image est module3 !anotherFunction. Le débogueur voit une entrée pour module3, mais il n’existe aucune correspondance pour anotherFunction dans ce module. Ensuite, le débogueur passe à la troisième image.
Supposons que la troisième image soit module2 !functionC. Le débogueur recherche d’abord une correspondance exacte, mais cette correspondance n’existe pas. Le débogueur supprime ensuite le nom de la fonction et découvre module2 !funct\* dans triage.ini. Cette correspondance met fin à la recherche, car le débogueur détermine que le propriétaire est « Person4 ».
Le débogueur affiche ensuite une sortie similaire à l’exemple suivant.
0:000> !analyze
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
Use !analyze -v to get detailed debugging information.
Probably caused by : module2 ( module2!functionC+15a )
Followup: Person4
---------
Une correspondance plus complète est prioritaire sur une correspondance plus courte. Toutefois, une correspondance de nom de module est toujours préférée à une correspondance de nom de fonction. Si module2 !funct\* n’avait pas été dans ce fichier triage.ini, le débogueur aurait sélectionné module2 !\* comme correspondance. Et si module2 !funct\* et module2 !\* avaient été supprimés, mod* !functionC aurait été sélectionné.
Syntaxe triage.ini spéciale
Si vous omettez le point d’exclamation et le nom de la fonction ou si vous ajoutez !\* après un nom de module, toutes les fonctions de ce module sont indiquées. Si une fonction dans ce module est également spécifiée séparément, la spécification plus précise est prioritaire.
Si vous utilisez « default » comme nom de module ou de fonction, cela équivaut à un caractère générique. Par exemple, nt !\* est identique à nt !default et la valeur par défaut est identique à * !\*.
Si une correspondance est établie, mais que le mot ignore apparaît à droite du signe égal (=), le débogueur passe à l’image suivante dans la pile.
Vous pouvez ajouter last_ ou maybe_ avant le nom d’un propriétaire. Ce préfixe donne au propriétaire moins de priorité lorsque vous exécutez !analyze. Le débogueur choisit une correspondance définie inférieure à la pile plutôt qu’une correspondance maybe_ plus élevée sur la pile. Le débogueur choisit également une correspondance maybe_ inférieure sur la pile plutôt qu’une correspondance last_ plus élevée sur la pile.
Exemple de triage.ini
Un exemple de modèle triage.ini est inclus dans le package Outils de débogage pour Windows. Vous pouvez ajouter les propriétaires de tous les modules et fonctions que vous souhaitez à ce fichier. Si vous ne souhaitez avoir aucune valeur globale par défaut, supprimez la ligne default=MachineOwner au début de ce fichier.