Poser un point d’arrêt dans Totalview

Il existe plusieurs sortes de points d’arrêt : Quels sont-ils ? Comment les poser, les sauvegarder ?

Article mis en ligne le 24 novembre 2014
dernière modification le 7 avril 2017
logo imprimer

Les différents Action Points

Il existe plusieurs sortes de points d’arrêt dans totalview [1], qui sont regroupés sous le nom générique d’"Actionpoint" :
- Le "breakpoint" : Le point d’arrêt simple, l’application (ou le process) s’arrête à la ligne suivant le point d’arrêt. Permet de contrôler ce qui se passe.
- Le "watchpoint" : Un point d’arrêt associé à une adresse mémoire : Si l’adresse mémoire est modifiée, le programme est arrêté.
- L’Action Point conditionnel : Lors du passage sur le point d’arrêt (break ou watch), un bout de code est exécuté. Seule la fonction $stop permet d’arrêter le déroulement du programme, on peut s’en servir pour n’arrêter le programme que si une certaine condition est remplie.

Quelles lignes peuvent constituer un Action Point ?

Seules les lignes exécutables, marquées dans le source par un petit encadré gris, peuvent constituer des points d’arrêt : ce sont des lignes de code exécutable, les définitions de fonctions ou autres variables ne peuvent être utilisées.

On ne pose pas de breakpoint n’importe où
Seules les lignes contenant du code exécutable peuvent être utilisées pour un breakpoint

Poser un Action Point

Il existe plusieurs manières de faire :
- A partir de la fenêtre du code source : permet de poser simplement un point d’arrêt de manière "visuelle".
- A partir de l’option du menu Action Point/At Location : permet de poser un point d’arrêt à un endroit donné du code : sur une ligne d’un fichier donné, lors de l’appel d’une fonction, voire sur toutes les méthodes d’une classe (C++)

Modifier les propriétés d’un Action Point

Pour accéder à, ou modifier les propriétés d’un Action Point, il suffit de cliquer sur le point d’arrêt avec le bouton de droite, et d’aller dans le menu Properties

Suivre l’évolution de certaines variables

Particulièrement lorsqu’on pose des points d’arrêt, il est souvent utile de "suivre" l’évolution d’une ou plusieurs variables, ou d’une ou plusieurs expressions.
Plusieurs outils existent pour cela, par exemple : Tools/Expression List : on peut entrer (comme dans un tableur) une ou plusieurs expressions, celles-ci seront automatiquement actualisées lors de chaque interruption du programme. Par exemple dans l’exemple ci-dessous, on a mis un breakpoint dans la boucle principale de l’application : l’affichage de deux variables est actualisé à chaque arrêt, donc à chaque itération.

On s’arrête...
Ce breakpoint est posé à l’intérieur d’une boucle, on s’arrête donc à chaque itération
...Et on fait le point !
Lors de chaque arrêt, cette fenêtre sera rafraichie

Activer ou désactiver un point d’arrêt

Il est possible de désactiver temporairement un point d’arrêt. Désactivez le point d’arrêt, puis cliquez sur Go pour laisser filer l’application durant plusieurs minutes. Activez à nouveau le point d’arrêt : l’application va s’arrêter et le déboguage va pouvoir reprendre.

On gagne du temps !
Il ne se passe rien d’intéressant avant quelques minutes : il suffit d’activer/désactiver le breakpoint pour passer les étapes sans intérêt.

NOTE - On peut aussi interrompre l’application en pressant le bouton Halt (en haut de la Process Window), mais dans ce cas le programme s’arrête n’importe où dans le code, ce qui n’est pas toujours très pratique...

Poser un point d’arrêt conditionnel

Un point d’arrêt conditionnel exécutera un petit bout de code juste avant la ligne considérée. Cela permet de :

  • N’interrompre l’exécution du code que si une certaine condition est remplie (cf. la figure ci-dessous) [2]
  • "patcher" provisoirement le code, par exemple forcer une variable à telle ou telle valeur sans passer par une fonction couteuse en temps [3]
    Un exemple de point d’arrêt conditionnel
    Le programme ne s’arrêtera que si la variable treated_files est supérieure à 2500

Poser un "watchpoint"

Alors qu’un "breakpoint" est lié à une ligne du code, un "watchpoint" est lié à une variable (plus précisément une adresse mémoire) : le watchpoint sera activé dès que la variable changera.

De même que pour les breakpoints, on peut poser des "watchpoints conditionnels". Dans l’exemple ci-dessous, le programme s’arrêtera si et seulement si la variable treated_files change, et si la différence entre la valeur avant et après le changement est inférieure à 10

Un exemple de watchpoint conditionnel
Le programme s’arrêtera si et seulement si la variable treated_files est incrémentée d’une valeur inférieure à 10
Notes :

[1Liste non exhaustive !

[2Pour une liste des commandes et des variables utilisables, cf. page 342 du User Guide

[3page 182 du UserGuide



Site réalisé sous SPIP
avec le squelette ESCAL-V3
Version : 3.86.44
Hébergeur : INP Toulouse