Addr2Line2Locations : messages d’exceptions Ada et Addr2Line sous GPS

Présentation…

« 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.

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, nommé 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 propose 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é personnalisé avec un message ; c’est-à-dire, comme dans le cas d’une instruction du genre Raise EXCEPTION_NAME with "Custom Message", comme permis par 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 Licence 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 ), exigeant 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écessaire, 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.

La boite de dialogue « Addr2Line2Locations » avec ses entrées renseignées

La boite de dialogue Addr2Line2Locations avec ses entrées renseignées

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 consé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’exécution dans une console GPS, comme le font AdaControl et ASISEyes.

La boite de dialogue
            automatiquement renseignée d’après le contenu de la console apparaissant
            à gauche

La boite de dialogue automatiquement renseignée d’après le contenu de la console apparaissant à gauche

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 parmi 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.

Le nom de
            l’exécutable automatiquement renseigné d’après les propriétés du
            projet courant

Le nom de l’exécutable automatiquement renseigné d’après les propriétés du projet courant

Remarque : si l’application ne figure pas dans le répertoire courant de votre projet courant, alors il vous sera nécessaire de fournir 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 ( par exemple, sous Windows ou assimilés, parmi d’autres, pour ne pas être exhaustif ).

Comment ça marche ( du point de vue de ou de-la développeur/se )

Avant tout, en tant que développeur, si vous planifier d’utiliser le module Addr2Line2Locations, vous êtes supposé(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 disponible 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 optionnels. 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’archiveur fourni en standard sur votre plateforme, vous pouvez obtenir l’application soit sous forme ZIP, sous 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-like ).