Flash player not detected. Please visit http://www.macromedia.com
 
> Totalview
 
     
 

back

Utilisation du logiciel de débogage Totalview



Le logiciel de débogage Totalview permet de déboguer graphiquement des applications écrites en C/C++ et Fortran, y compris les applications multithreadées ou distribuées (MPI). L'interface graphique permet de naviguer facilement et intuitivement dans les sources du code, de lancer l'exécution, de contrôler les valeurs des variables, de revenir en arrière pendant l'exécution du code si l'utilisation du module ReplayEngine a été activée.
La machine Starlight donne accès à 16 jetons Totalview (débogage de 16 processus simultanément) et à 8 jetons ReplayEngine.



Premiers pas
Le code doit être compilé avec l'option -g. Il est également conseillé de ne pas utilisé d'options d'optimisation pour déboguer un code. Si le code fait appel à des bibliothèques externes et que vous souhaitez déboguer également ces bibliothèques (ou au moins savoir ce qu'il s'y passe), elles doivent également être compilées avec l'option -g.

Totalview se lance avec la commande totalview. Vous pouvez donner le nom de l'exécutable en ligne de commande : totalview monexec.
Si vous ne précisez pas d'exécutable, une fenêtre intitulée "Open: Program" accessible en cliquant sur le bouton "Browse..." de la fenêtre "New Program" vous permettra de le choisir.

Sur la fenêtre "New Program", vous pouvez cocher la case "Enable ReplayEngine", ce qui vous permet d'enregistrer toutes les étapes de calcul de votre code et de pouvoir revenir en arrière pour rejouer une partie de l'exécution en cours de débogage.
Vous pouvez également cocher la case "Enable memory debugging" pour accéder au débogage spécifique des opérations sur la mémoire.

Attention : l'utilisation de ReplayEngine entraîne une perte de performance très importante et peut conduire à l'arrêt brutal de TotalView si le code en cours de débogage utilise trop de mémoire. Il est donc conseillé de n'utiliser cette option que sur des cas tests et/ou des temps d'exécution très courts.



(Cliquez sur les images pour les agrandir.)
Une fois l'exécutable et les options choisies, cliquez sur Ok pour arriver à la fenêtre principale. Le contenu des autres onglets sera abordé plus tard.



La fenêtre principale est divisée en 5 zones distinctes, de haut en bas (les zones colorées sur la captures d'écran suivante) :

  • en haut, les menus et contrôles d'exécution (en rouge) ;
  • ensuite la fenêtre listant les appels aux différentes fonctions (en vert) ;
  • au même niveau la fenêtre listant les différentes variables et les objets (en bleu) ;
  • puis la fenêtre affichant les sources du code en cours de débogage (en jaune) ;
  • en bas, les onglets et la fenêtre affichant les threads, processus et "Actions points" (en mauve).



Pour lancer un premier débogage, il suffit de placer un ou des points d'arrêts sur la source du code en cliquant (clic gauche) sur le numéro de ligne où vous souhaitez que l'exécution fasse une pause, puis d'appuyer sur le bouton Go.

Si votre source est divisée en plusieurs fichiers, le fichier source contenant le programme principal est ouvert au lancement de TotalView. Pour ouvrir un autre fichier, vous pouvez double cliquer sur le nom d'une fonction/procédure apparaissant dans le programme principal et le fichier la contenant sera ouvert. Vous pouvez également utiliser le menu File/Open Source.

Il faut noter qu'il est impossible de mettre un point d'arrêt sur une ligne vide.

L'exécution du code est contrôlée par les boutons situés en haut de la fenêtre principale. Notez que les boutons situés sur la droite de la barre - GoBack, Prev, ... - sont désactivés lorsque ReplayEngine n'est pas utilisé.
  • Go : le code est exécuté jusqu'au prochain point d'arrêt ou la prochaine barrière, ou bien jusqu'à ce que l'exécution se termine, normalement ou sur une erreur.
  • Halt : l'exécution est interrompue (en pause) et la fenêtre des sources indique la ligne de code qui contient la prochaine instruction devant être exécutée. Pour relancer l'exécution, il suffit de cliquer sur Go.
  • Kill : le processus est tué, l'exécution est terminée. Si vous cliquez sur Go, l'exécution recommencera depuis le début.
  • Restart : l'exécution est relancée depuis le début du code.
  • Next : la ligne d'instruction est exécutée complétement, si elle contient un appel à une fonction, cette fonction est exécutée également.
  • Step : l'exéction avance d'une ligne de code, si on se trouve au niveau de l'appel d'une fonction, on entre dans cette fonction, à la première ligne.
  • Out : l'exécution de l'ensemble de la fonction/routine courante est réalisée et on se place à la sortie.
  • Run To : l'exéction se poursuit jusqu'à la ligne sélectionnée (ce bouton est grisé si aucune ligne n'est sélectionnée).
La différence entre Next, Step, Out et Run To est expliquée à l'aide d'une exemple à la page 239 du User Guide (page 271 du fichier).



Code parallèle MPI
Pour déboguer un code parallélisé à l'aide de MPI, il faut utiliser l'option -tv de mpirun.
Par exemple, pour déboguer le code ppl sur 4 processus, il suffit de lancer l'exécution avec la commande mpirun -tv -np 4 ./ppl
La fenêtre Startup Parameters apparaît alors, permettant de choisir les options ReplayEngine et Memory Debugging.



Après avoir cliqué sur Ok, une seconde fenêtre apparaît vous demandant si vous souhaitez interrompre l'application parallèle, cliquez sur Yes. Vous voyez les processus apparaître dans la fenêtre TotalView et les sources de votre code dans la fenêtre principale.



Attention : le débogage des applications MPI ne fonctionne pas avec la distribution MPI Intel. Il est conseillé d'utiliser OpenMPI avec TotalView (c'est la distribution utilisée par défaut, pour savoir comment modifier la distribution MPI utilisée voir la page dédiée à MPI).



Contrôles avancés

Points d'arrêt "conditionnel"

Il est possible de placer un point d'arrêt qui ne s'active que lorsqu'une condition est remplie. Cela permet par exemple d'arrêter l'exécution du code dans une boucle pour une valeur donnée de l'indice de boucle.
Pour cela, il faut faire un clic droit sur le numéro de ligne où vous voulez placer le point d'arrêt et choisir "Properties" dans le menu.



En cliquant sur "Evaluate" en haut de la fenêtre "Action point properties", vous faites apparaître une zone de texte intitulée "Expression" dans laquelle vous pouvez écrire la condition à évaluer pour activer le point d'arrêt. Cette condition doit être écrite en utilisant la syntaxe C/C++ ou Fortran (il faut préciser la syntaxe utilisée en cliquant la case correspondante). Cliquez sur "Ok", une étiquette Eval orange apparaît à la place du numéro de ligne.



Dans l'exemple présenté sur la capture d'écran, le point d'arrêt devient actif lorsque i=2 dans la boucle et la condition s'écrivait donc
if(i==2) $stop
en utilisant la syntaxe C++.



Contenu des tableaux

Un double clic sur le nom d'un tableau dans la fenêtre des sources ouvre une fenêtre représentant son contenu (dans l'exemple de la capture d'écran, il s'agit d'un tableau à une entrée, le contenu des tableaux à plusieurs entrées peut être affiché de la même manière).



Il est possible d'afficher des statistiques sur le contenu du tableau à l'aide du menu Tools/Statistics. Une nouvelle fenêtre apparaît, donnant un certain nombre d'informations telles que le nombre d'éléments, le nombre de zéros, de NaN, de Inf, les valeurs min, max et moyenne, etc...



Il est également possible de représenter graphiquement le contenu du tableau à l'aide du menu Tools/Visualize, qui trace le contenu du tableau en fonction du numéro d'élément.



Il est également possible de filtrer le contenu du tableau en écrivant une condition dans la zone de texte Filter de la fenêtre du tableau. Dans l'exemple de la capture d'écran, seuls les éléments dont la valeur est 4 sont affichés, la condition s'écrivant
==4
dans la zone de texte Filter. Les conditions s'écrivent à l'aide des opérateurs de comparaison C/C++ ou Fortran.



Vous pouvez vous référer aux documentations Totalview pour plus de renseignements :



Pour toute information complémentaire, vous pouvez contacter Stéphane Méné ou Fabrice Roy.

 
 
 
Présentation | Recherche | Enseignement | Grand Public | Centre de données | Séminaires | Contacts | Intranet