Addr2Line2Locations, dont le nom est tiré de Addr2Line, est un utilitaire pour GPS (un IDE spécialisé dans le langage Ada, produit par AdaCore), vous permettant de naviguer dans les liens arrières des messages d'exceptions ainsi qu'à l'instruction d'origine de l'exception, via la panneau Locations de GPS.
Dans cette page ...
Remarque au sujet de l'emploie qu'il est fait du terme GPS ici
Le principe de Addr2Line2Locations dans les grandes lignes
Accords de licence
Comment ça marche (du point de vue de l'utilisateur/rice)
Comment ça marche (du point de vue de/de-la développeur/se)
Obtenir Addr2Line2Locations
Installer Addr2Line2Locations
La suite…
Remarque au sujet de l'emploie qu'il est fait du terme GPS ici
Si vous êtes arrivés sur cette page après avoir entrée sur votre
moteur de recherche préféré, une requête telle que "GPS", notez
que l'usage qu'il est fait de ce mot ici, fait référence à un IDE orienté vers le langage Ada et produit par AdaCore
. Si
vous étiez à le recherche de documentations sur le Global Positioning
System, il se peut que vous soyez un peu déçu(e). Mais tant que
vous y êtes, vous êtes quoiqu'il en soit les bienvenues pour découvrir
ce dont il est question ici, et vous amusez avec nous.
Le principe de Addr2Line2Locations dans les grandes lignes
Addr2Line2Locations opère sur un message d'exceptions qui est affiché sur le flux de sortie, par une application Ada ayant été compilée et liée avec GNAT. Ces messages d'exceptions peuvent contenir une chaîne de liens arrière dans la pile d'appel, qui sont des adresses brutes ne faisant sens que dans l'espace mémoire de l'application qui s'est terminé par une exception non-traitée.
Deux exemples typiques de tels messages d'exception, pour vous rappeler quelque chose :
Execution terminated by unhandled exceptionException name: ASIS.EXCEPTIONS.ASIS_INAPPROPRIATE_ELEMENTMessage:
a4g-vcheck.adb:885Call stack traceback locations:0x494daa 0x4c620c
0x533f47 0x533f78 0x533e00 0x533e00 0x533e00 0x533e000x533e00 0x5338ed
0x536516 0x53218d 0x53245f 0x530f04 0x5383c3 0x4012350x401286 0x7c817075
raised ASIS.EXCEPTIONS.ASIS_INAPPROPRIATE_ELEMENT : a4g-vcheck.adb:885
Les adresses présentes dans le premier prototype, sont pour ainsi
dire inutilisable en l'état par un être humain, et sont plutôt typiquement
passées à la moulinette de Addr2Line, un utilitaire de la suite GNU-Binutils
pour passer des adresses mémoire brutes,
aux positions correspondantes dans les sources de l'application.
Faire appel à Addr2Line pour chaque adresse de la chaîne d'appel,
récupérer chacune de ses réponses et pour chacune de celles-ci,
se rendre à la position correspondante dans le source correspondant,
peut être une opération fastidieuse (ou source d'erreur), et même
plus-que-fastidieuse, si plusieurs messages d'exceptions doivent
être traités.
L'IDE GPS intègre un panneau standard, nomé Locations, la plupart
du temps utilisé pour naviguer dans les messages d'erreurs de GPRBuild,
GPRMake ou AdaControl
(un utilitaire que vous êtes censé-e-s connaître). L'idéal, serait
qu'une application proprose une solution aussi commode et ergonomique
pour naviguer dans la chaîne d'appel fournie en guise d'information
dans les messages d'exception. C'est ce que propose Addr2Line2Locations.
Note en marge : même si un message d'exception, ne contient aucune
information de chaîne d'appel, alors Addr2Line2Locations pourra
tout de même encore vous rendre un petit service : s'il parvient
à identifier la localisation de l'instruction à l'origine de l'exception,
il affichera tout de même cet élément dans le panneau Locations,
vous permettant d'y accéder directement. L'adresse de l'instruction
qui lève une exception, n'est en effet, pas un élément de la chaîne
d'appel, qui ne liste que les adresses des appels de sous-programmes.
Ors, une instruction Ada Raise, n'est pas un appel à un sous-programme.
La localisation de l'instruction ayant levé l'exception, pourra
ne pas être déterminée, si l'exception a été personalisé avec un
message (c'est-à-dire, comme dans le cas d'une instruction du genre
Raise EXCEPTION_NAME with "Custom Message" [Ada ARM 2005 - 11.3 2/2
]). L'adresse de l'instruction ayant
levé l'exception est une donnée à part.
Accords de licence
Maintenant que vous savez ce qu'est Addr2Line2Locations, si cette
application vous intéresse, c'est le moment de prendre connaissance
de sa licence d'utilisation : Addr2Line2Locations peut être utilisée
en conformité avec les termes de la Licence BSD À Deux Clauses,
alias, la License BSD Simplifiée, qui vous concède le droit de redistribuer
ce programme, à des fins commerciales ou non, sous une forme modifiée
ou non (mais dans ce cas, il sera requis de le préciser, afin de
ne pas entrainer de confusions), exigant seulement que vous préserviez
et laisser en place, la mention du droit d'auteur, la mention de
la licence, et les informations de contacts des différents auteurs
successifs (si la version que vous modifiez est une version ayant
été déjà modifiée par d'autres auparavant). En savoir plus sur cette
licence : Overview of the Two-Clause / Simplified BSD License
Comment ça marche (du point de vue de l'utilisateur/rice)
Addr2Line2Locations se présente à vous, en tant qu'utilisateur de GPS, comme une entrée de menu supplémentaire sous le menu principal Tools de GPS. Le lancement de l'utilitaire vous amène à une boite de dialogue vous invitant à fournir les informations requises à la production des entrées ultérieures dans le panneau Locations. Pour votre convenance, vous n'êtes pas nécessairement dans l'obligation de séparer manuellement, ni de formater au préalable, la liste des adresses de la pile d'appels, cette extraction étant effectuée automatiquement. Il est attendu (si nécessaire, voir plus loin), que vous fournissiez les dernières lignes de la sortie générée par une application qui se sera terminée sur une exception, et (si nécéssaire, voir plus loin) que vous entriez le nom de cette application. Puis, validez, et patientez une petite seconde, le temps que s'affiche les entrées dans le panneau Locations, à moins que vous n'ayez été entre temps informé(e)s par une boite de message, qu'aucune information n'a put être extraite à partir du message d'exception fourni.
![]() |
Afin d'en faciliter l'utilisation et de la rendre plus rapide et directe, les champs de la boite de dialogue Addr2Line2Locations seront automatiquement remplis autant que possible. Le champs du texte du message d'exception, sera rempli d'aprés le contenu texte de la console GPS qui serait éventuellement active à l'instant de l'invocation de la commande Addr2Line2Locations. En sorte, Addr2Line2Locations est capable de fonctionner comme un menu sensible au contexte et il est donc suggéré que vous cliquiez au préalable sur la console qui contiendrait le message d'exception, avant que vous n'appeliez l'utilitaire. En conscéquence, il pourra être plus avantageux de lancer les applications dans une console GPS ou de rediriger les sorties de celles-ci vers une console GPS. Cela fonctionne tout aussi parfaitement avec les utilitaires affichant automatiquement tous messages d'erreur d'execution dans une console GPS, comme le font AdaControl et ASISEyes.
![]() |
Le nom de l'exécutable de l'application sera automatiquement renseigné, si possible, d'après les propriétés du projet courant. Si votre projet courant est configuré pour générer plusieurs exécutables, alors il vous est proposé de choisir son nom parmis cette liste. Le champ du nom de l'exécutable reste éditable en tous les cas, de sorte à ce que s'il ne figure pas dans la liste, il vous soit toujours possible de l'éditer manuellement malgré-tout.
![]() |
Remarque : si l'application ne figure pas dans le répertoire courant de votre projet courant, alors il vous sera nécessaire de founir le nom complet de l'application, c'est-à-dire le répertoire et le nom de l'exécutable. Le nom de l'exécutable doit toujours comprendre l'extension de fichier dans les cas où cela est applicable (Ex. sous Windows ou assimilés, parmis d'autres, pour ne pas être exhaustif).
Comment ça marche (du point de vue de/de-la développeur/se)
Avant tout, en tant que développeur, si vous planifier d'utiliser le module Addr2Line2Locations, vous êtes suposé(e)s avoir pris connaissance du fonctionnement du point de vue utilisateur, que vous devriez avoir lu également.
Addr2Line2Locations est un module python, qu'il est possible d'utiliser sans requérir que l'utilisateur ne déclenche manuellement la commande Addr2Line2Locations depuis son menu. La méthode invok_addr2line est disponnible pour utilisation depuis votre application, et est définie comme :
def invok_addr2line (executable_name = None, exception_log = None):#
… Implémentation…
Il vous est possible de l'utiliser avec la sortie d'erreur de n'importe quelle application en tant que valeur du paramètre exception_log. Ses deux paramètres sont optionels. Si l'un ou les deux est à None, alors la boite de dialogue présentée dans la section sur le point de vue utilisateur, s'affichera ; de même que s'il apparaît que les données fournies pour le paramètre exception_log ne contiennent pas les informations attendues. Pour plus de détails, veuillez vous référer à la documentation du module ou à la documentation individuelle de chacune des méthodes présentes dans le module (ou en dernier recours, de consulter les commentaires du source, notant bien que vous pouvez également transmettre un e-mail au besoin, à l'une des adresses e-mail indiquée dans la notice de droit d'auteur figurant dans le module).
Il est éventuellement possible d'utiliser n'importe quelles autres des méthodes définies dans ce module, pour usage dans une autre application, mais en n'oubliant pas alors qu'il n'est pas garantie qu'elle resteront en l'état lors d'éventuelles mises à jour ultérieures. Si vous souhaitez pouvoir vous reposer sur l'une de ces méthodes, faites en part via le contact indiqué dans le source du module.
Obtenir Addr2Line2Locations
Selon l'achiveur fourni en standard sur votre plateforme, vous pouvez obtenir l'application soit sous forme ZIP, sout sous forme TAR.GZ, actuellement sous la version 1, révision 2 (V1R2) :
Installer Addr2Line2Locations
Copiez le fichier Python dans le sous-répertoire "share/gps/plug-ins" de votre installation GPS, pour une installation pour tous les utilisateurs de la machine. Pour une installation simple-utilisateur ou utilisateurs au cas-par-cas, copiez le fichier Python dans le sous répertoire ".gps/plug-ins" du profile utilisateur de chaque utilisateur pour lequel vous souhaitez l'installer (la procédure est identique sous Windows et UNIX-ou-assimilé).


