Réserver une Démo
Pré. Proc.

Points d'Action

Points d'Action sont des points d'arrêt qui peuvent effectuer des actions. Lorsqu'un point d'arrêt est atteint, le script Point d'Action est invoqué par le débogueur et le processus continue à exécuter . Points d'Action sont des outils de débogage sophistiqués et fournissent aux développeurs experts une suite de commandes supplémentaire. Avec eux, un développeur peut modifier le comportement d'une fonction, capturer le point auquel un comportement change et modifier/détecter l'état d'un object . Pour support ces fonctionnalités , Points d'Action peuvent modifier la valeur des variables locales et membres primitives, peuvent définir leurs propres « variables définies par l'utilisateur » et modifier l'exécution du programme.

Variables définies par l'utilisateur dans Points d'Action et Points d'Arrêt

Variables définies par l'utilisateur (UDV) :

  • Fournir les moyens de définir une primitive ou string UDV dans les instructions Point d'Action
  • Peut être utilisé dans les instructions de condition de plusieurs marqueurs/points d'arrêt
  • Peut être facilement vu dans la même fenêtre Variables locales
  • Les valeurs finales de tous les UDV sont enregistrées à la fin du débogage.

Dans la syntaxe UDV, le nom UDV :

  • Doit être précédé d'un caractère # (dièse)
  • Est insensible à la casse

Déclarations Point d'Action

Les instructions Point d'Action peuvent contenir des commandes set, des commandes goto et des commandes jmp.

commande set

Ensembles de valeurs variables. Une instruction Point d'Action peut contenir plusieurs commandes « set », qui doivent toutes précéder toute commande « goto ».

La syntaxe de la commande « set » est :

définir LHS = RHS

Où:

  • LHS = le nom de la variable en tant que :
    - variable définie par l'utilisateur (UDV) telle que #myval
    - variable locale ou membre telle que strName ou this.m_strName
  • RHS = la valeur à attribuer :
    - En tant que variable littérale ou locale
    - S'il s'agit d'un littéral, sous la forme de : integer , booléen, virgule flottante, caractère ou string

Commande set - Exemples de variables

Exemples d'UDV

Exemples de variables locales

définir #mychar = 'a'

définir ceci.m_nCount=0

définir #mystr = "une string "

définir bSuccess=false

définir #myint = 10

définir #myfloat = 0,5

définir #mytrue = vrai

commande goto

Cette commande bascule l'exécution vers un numéro de ligne différent dans une fonction. Une instruction Point d'Action ne peut contenir qu'une seule commande goto, comme commande finale de l'instruction.

La syntaxe de la commande goto est :

aller à L

L est un numéro de ligne dans la fonction actuelle.

La commande goto utilise des points d'arrêt pour atteindre son objectif, ce qui provoque un léger retard dans l'exécution du code. Cela peut être perceptible dans les zones de code qui sont exécutées très fréquemment, vous préférerez donc peut-être utiliser la commande jmp dans ce type de code, pour obtenir le même détournement d'exécution mais avec moins de retard.

commande jmp

La commande jmp est effectivement la même que la commande goto .

jmp 125

aller à 125

Ces deux commandes provoquent le changement de l'exécution à la ligne 125.

Cependant, l'instruction jmp utilise en interne l'instrumentation pour diriger le programme vers le déplacement de l'exécution, tandis que l'instruction goto utilise des points d'arrêt pour ce faire, ce qui provoque un retard dans le traitement. La différence réside donc dans les performances supérieures de l'instruction jmp , en particulier lorsque des régions de code sont exécutées très fréquemment.

Opérateurs Integer

Lorsqu'une variable définie par l'utilisateur (UDV) existe et qu'elle est de type int , elle peut être incrémentée et décrémentée à l'aide des opérateurs ++ et --. Par exemple :

  1. Créez un UDV et définissez sa valeur et son type sur une variable integer locale.
    AP1 : définir #myint = nTotalSoFar
  2. Augmenter l'UDV.
    AP2 : #monint++
  3. Diminuer l'UDV.
    AP3 : #myint--

Opérations de minuterie

Points d'Action peuvent indiquer le temps écoulé entre deux points. Il n'y a qu'un seul minuteur disponible, qui est réinitialisé ou démarré avec la commande startTimer. Le temps écoulé actuel peut ensuite être imprimé avec la commande printTimer. Enfin, le temps total écoulé est imprimé et le minuteur est arrêté avec la commande endTimer.

Exemple de conditions Point d'Action

Avec des littéraux et des constantes :

  • (#monchar='a')
  • (#mystr <> " ")
  • (#monint > 10)
  • (#monfloat > 0.0)

Avec des variables locales :

  • (#myval == this.m_strValue)
  • (#myint <> ceci->m_nCount)
  • (#myint != ceci->m_nCount)

Instruction Enregistrement

L'enregistrement des instructions peut être utile pour détecter les changements dans un comportement connu ; le point d'exécution (B) qui diverge d'une ou plusieurs exécutions précédentes (A). Les commandes sont :

  • recStart - démarre l'enregistrement ou commence la comparaison si un enregistrement précédent existe
  • recStop - termine l'enregistrement
  • recPause - mettre en pause l'enregistrement
  • recResume - reprend l'enregistrement
La commande recStart commence à enregistrer les instructions. Les instructions exécutées sont ensuite stockées. Lorsqu'une commande recStop est rencontrée, l'enregistrement est sauvegardé. Il ne peut y avoir qu'un seul enregistrement sauvegardé à la fois entre deux Points d'Action . Lorsqu'une commande recStart est rencontrée et qu'un enregistrement précédent existe, le débogueur commence à comparer chaque instruction suivante avec son enregistrement. Il peut effectuer de nombreuses comparaisons. Si et quand une différence est détectée, le débogueur s'arrête et la ligne de code où le comportement a changé s'affiche dans l'éditeur de code. L'itération de la comparaison est également imprimée.

L'enregistrement est stocké en mémoire par défaut, mais il peut également être stocké dans un fichier avec la syntaxe de commande :

Fichiers de démarrage recspec

Par exemple:

recStart c:\mylogs\onclickbutton.dat

Lorsqu'une commande recStart est rencontrée qui spécifie un fichier, et que ce fichier existe, il est chargé en mémoire et le débogueur entre immédiatement en mode de comparaison.

Expressions

Il n'y a pas de priorité implicite dans les expressions conditionnelles Point d'Arrêt , Point d'Action et Testpoint . Dans les expressions complexes, l'utilisation de parenthèses est obligatoire. Voir ces exemples :

Type

Exemple

Exemple de Point d'Action UDV

(#myint=1) AND (#mystr="Allemagne")

Exemples de variables locales

(this.m_nCount > 10) OR (nCount%1)

(this.m_nCount > 10) OR (bForce)

Opérateurs d'égalité dans les expressions conditionnelles

<> - Pas égal

!= - Pas égal

== - Égal

= - Égal

Opérateur d'affectation dans Point d'Action

= - Affecte RHS à LHS

Opérateurs Arithmétique dans les expressions conditionnelles

/ - division

+ - plus

- - moins

* - multiplication

% - module

Opérateurs logiques dans les expressions conditionnelles

AND - les deux doivent être vrais

OR - l'un doit être vrai

&& - les deux doivent être vrais

|| - il faut que ce soit vrai

^ - OR exclusif (un seul doit être vrai)