Contrôle des indicateurs et des paramètres de point d’arrêt
Il existe un certain nombre de méthodes qui peuvent être utilisées pour déterminer des informations de base sur les points d’arrêt :
GetId retourne l’ID du point d’arrêt.
GetType retourne le type de point d’arrêt (logiciel ou processeur) et le type du processeur effectif sur lequel le point d’arrêt est défini.
GetAdder retourne le client qui a ajouté le point d’arrêt.
GetOffset retourne l’adresse d’un point d’arrêt.
GetOffsetExpression retourne la chaîne d’expression qui spécifie l’emplacement du point d’arrêt.
En plus de son emplacement et de son type de point d’arrêt, un point d’arrêt a plusieurs paramètres qui contrôlent son comportement.
Les paramètres de point d’arrêt peuvent être contrôlés à l’aide de diverses méthodes spécifiques. En outre, la plupart des paramètres peuvent être interrogés ensemble à l’aide de GetParameters.
Indicateurs de point d’arrêt
Les indicateurs de point d’arrêt sont un type de paramètres de point d’arrêt.
Les indicateurs de point d’arrêt peuvent être interrogés à l’aide de GetFlags. Vous pouvez les modifier à l’aide de AddFlags, RemoveFlags ou SetFlags.
Les indicateurs de point d’arrêt forment un champ bit. Les indicateurs possibles qui peuvent être utilisés dans ce champ de bits, ainsi que leurs significations, sont les suivants :
DEBUG_BREAKPOINT_ENABLED
Lorsque cet indicateur est défini, le point d’arrêt est activé et aura son effet normal. Lorsque cet indicateur n’est pas défini, le point d’arrêt est désactivé et n’aura aucun effet. Si vous souhaitez désactiver temporairement un point d’arrêt, vous pouvez supprimer cet indicateur ; il est alors facile d’ajouter cet indicateur lorsque vous souhaitez réactiver ce point d’arrêt.
DEBUG_BREAKPOINT_ADDER_ONLY
Lorsque cet indicateur est défini, le point d’arrêt est un point d’arrêt privé. Ce point d’arrêt est visible uniquement pour le client qui l’a ajouté. Dans ce cas, les autres clients ne pourront pas interroger le moteur pour le point d’arrêt, et le moteur n’enverra pas d’événements générés par le point d’arrêt à d’autres clients. Tous les rappels (événement et sortie) liés à ce point d’arrêt seront envoyés uniquement à ce client. Consultez GetAdder.
DEBUG_BREAKPOINT_GO_ONLY
Lorsque cet indicateur est défini, le point d’arrêt n’est déclenché que si la cible est en exécution illimitée. Il n’est pas déclenché si le moteur effectue des instructions pas à pas dans la cible.
DEBUG_BREAKPOINT_ONE_SHOT
Lorsque cet indicateur est défini, le point d’arrêt se supprime automatiquement la première fois qu’il est déclenché.
DEBUG_BREAKPOINT_DEFERRED
Lorsque cet indicateur est défini, le point d’arrêt est différé. Cet indicateur est défini par le moteur lorsque le décalage du point d’arrêt est spécifié à l’aide d’une expression symbolique et que le moteur ne peut pas évaluer l’expression. Chaque fois qu’un module est chargé ou sans plomb dans la cible, le moteur tente de réévaluer l’expression pour tous les points d’arrêt dont l’emplacement est spécifié à l’aide d’une expression. Ceux qui ne peuvent pas être évalués sont marqués comme différés. Cet indicateur ne peut être modifié par aucun client.
Autres paramètres de point d’arrêt
Les paramètres de point d’arrêt incluent également :
Nombre de passes
Si un nombre de passes est associé au point d’arrêt, il n’est pas activé tant que la cible n’a pas passé le point d’arrêt au nombre spécifié. Le nombre de passes qui a été défini à l’origine est disponible à l’aide de GetPassCount. Le nombre de fois où le moteur passe le point d’arrêt avant son activation est trouvé à l’aide de GetCurrentPassCount. Le nombre de passes peut être réinitialisé à une nouvelle valeur à l’aide de SetPassCount.
Thread de correspondance
Si un thread est associé au point d’arrêt, il est ignoré par le moteur lorsqu’il est rencontré par un autre thread. Le thread est disponible à l’aide de GetMatchThreadId et peut être modifié à l’aide de SetMatchThreadId.
Commande
Une commande peut être associée au point d’arrêt. La commande est exécutée lorsque le point d’arrêt est activé. Cette commande est disponible à l’aide de GetCommand et peut être modifiée à l’aide de SetCommand.
Taille
Si le point d’arrêt est un point d’arrêt du processeur, il doit avoir une taille spécifiée. Cela détermine la taille du bloc de mémoire dont l’accès activera le point d’arrêt. Le début du bloc est l’emplacement du point d’arrêt. La taille est disponible à l’aide de GetDataParameters et peut être modifiée à l’aide de SetDataParameters.
Type d’accès
Si le point d’arrêt est un point d’arrêt du processeur, il doit avoir un type d’accès. Cela détermine le type d’accès qui activera le point d’arrêt. Par exemple, le point d’arrêt peut être activé si la cible lit, écrit dans ou exécute la mémoire spécifiée par le point d’arrêt. Le type d’accès est accessible à l’aide de GetDataParameters et peut être modifié à l’aide de SetDataParameters.
Paramètres valides pour les points d’arrêt du processeur
Les types d’accès suivants sont disponibles pour les points d’arrêt du processeur :
Valeur | Description |
---|---|
DEBUG_BREAK_READ |
Le point d’arrêt est déclenché lorsque le processeur lit la mémoire dans le bloc de mémoire du point d’arrêt. |
DEBUG_BREAK_WRITE |
Le point d’arrêt est déclenché lorsque le processeur écrit de la mémoire dans le bloc de mémoire du point d’arrêt. |
DEBUG_BREAK_READ | DEBUG_BREAK_WRITE | Le point d’arrêt est déclenché lorsque le processeur lit ou écrit de la mémoire dans le bloc de mémoire du point d’arrêt. |
DEBUG_BREAK_EXECUTE |
Le point d’arrêt est déclenché lorsque le processeur extrait l’instruction dans le bloc de mémoire du point d’arrêt. |
DEBUG_BREAK_IO |
Le point d’arrêt est déclenché lorsque le port d’E/S du bloc mémoire des points d’arrêt est accessible. (Windows XP et Microsoft Windows Server 2003 uniquement, mode noyau uniquement, x86 uniquement) |
Tous les types et tailles d’accès ne sont pas pris en charge sur tous les processeurs. Les types et tailles d’accès suivants sont pris en charge :
x86
Tous les types d’accès sont pris en charge. DEBUG_BREAK_READ se comporte comme DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. La taille doit être 1, 2 ou 4. L’adresse du point d’arrêt doit être un multiple de la taille.
x64
Tous les types d’accès sont pris en charge. DEBUG_BREAK_READ se comporte comme DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. La taille doit être 1, 2, 4 ou 8. L’adresse du point d’arrêt doit être un multiple de la taille.