Trace GNAT FSF avec numéro de lignes ...

Stéphane Rivière via Ada-france <[email protected]> Tue, 28 Jun 2022 16:34:52 +0200
Newsgroups gmane.comp.lang.ada.france
Organization La Maison
Message-ID <[email protected]>
Bonjour à toutes et tous,

Dans nos devs, on a une fonction une trace post-mortem, avec affichage 
et écriture sur disque.

Dans les version Pro et CE, AdaCore a intégré l'utilitaire GNU/GCC 
addr2line dans le runtime GNAT. Il est appelé pour afficher les noms de 
sous-programmes et numéros de ligne de la pile d'appel.

Cette fonctionnalité est absente de la version FSF. C'est une plainte 
récurrente sur le net, certains proposent des contournements, mais aucun 
ne fonctionnent ici (Linux, GNAT FSF 11).

Les versions CE étant enterrées, il y avait deux solutions pour rétablir 
cette fonctionnalité bien utile ; la propre (faire pareil qu'AdaCore, 
possible mais manque de temps) et la sale (plus rapide). Donc en résumé...

*CE21 (ou Pro)*

Exception time         : 20220627 175714
Program uptime         : 0h00m00s
Program build DT stamp : build 2022-06-27 17:57:11
Program name & version : gnx v3.2
Library name & version : v20 v0.11
Start directory        : 
/home/sr/Seafile/Sowebio/informatique/github/genesix/gnx/bin
Home directory         : /home/sr
Ada mem. alloc. (bytes): Ada Cur: [ 22828 ] Max: [ 40356 ]
All mem. alloc. (bytes): All Cur: [ 4788224 ] Max: [ 4788224 ]

raised CONSTRAINT_ERROR : bad input for 'Value: "sr"
[./gnx]
0x732ae2 system__val_util__bad_value at ???
0x731c2c system__val_int__impl__scan_integer at ???
0x731cb5 system__val_int__impl__value_integer at ???
*0x577e6a V20.Vst.To_Integer at v20-vst.adb:84*
*0x41b05a Gnx at gnx.adb:1174**
**0x53521d Main at b__gnx.adb:455*
0x74ca98 __libc_start_call_main at ???
0x74e2f5 __libc_start_main at ???
0x406d43 _start at ???

*GNAT 11.2 (avant)
*

Exception time         : 20220627 170132
Program uptime         : 0h00m00s
Program build DT stamp : build 2022-06-27 18:00:48
Program name & version : gnx v3.2
Library name & version : v20 v0.11
Start directory        : 
/home/sr/Seafile/Sowebio/informatique/github/genesix/gnx/bin
Home directory         : /home/sr
Ada mem. alloc. (bytes): Ada Cur: [ 22828 ] Max: [ 40356 ]
All mem. alloc. (bytes): All Cur: [ 4861952 ] Max: [ 4861952 ]

raised CONSTRAINT_ERROR : bad input for 'Value: "sr"
[./gnx]
0x70c399 system__val_util__bad_value at ???
0x70b7ad system__val_int__impl__scan_integer at ???
0x70b7ee system__val_int__impl__value_integer at ???
*0x574bca v20__vst__to_integer__2 at ???**
**0x41c801 _ada_gnx at ???**
**0x5311f5 main at ???*
0x721f48 __libc_start_call_main at ???
0x7237a5 __libc_start_main at ???
0x406db3 _start at ???

*GNAT 11.2 (après)*

Exception time         : 20220628 121655
Program uptime         : 0h00m00s
Program build DT stamp : build 2022-06-28 12:16:49
Program name & version : gnx v3.2
Library name & version : v20 v0.11
Start directory        : 
/home/sr/Seafile/Sowebio/informatique/github/genesix/gnx/bin
Home directory         : /home/sr
Ada mem. alloc. (bytes): Ada Cur: [ 24204 ] Max: [ 40356 ]
All mem. alloc. (bytes): All Cur: [ 5189632 ] Max: [ 5189632 ]

raised CONSTRAINT_ERROR : bad input for 'Value: "sr"
[./gnx]
0x71e4d9 system__val_util__bad_value at ???
0x71d8ed system__val_int__impl__scan_integer at ???
0x71d92e system__val_int__impl__value_integer at ???
*0x5784ac v20__vst__to_integer__2 at v20-vst.adb:84 (discriminator 1)**
**0x41c801 _ada_gnx at gnx-utl_sv.adb:1174**
**0x5311f5 main at b__gnx.adb:448*
0x734088 __libc_start_call_main at ???
0x7358e5 __libc_start_main at ???
0x406db3 _start at ???

Au traitement d'une exception létale, la fonction de v20 (notre lib 
généraliste) en charge de la trace regarde si l'utilitaire addr2line 
existe sur le système puis, pour chaque ligne indiquant un "???" lance, 
sur son propre exécutable, un addr2line -e <nom de l'exécutable> 
<adresse>  et analyse le retour. Si ce dernier contient une réponse 
valide (exemple : /home/sr/.../debug/gnx-utl_sv.adb:1174, par opposition 
à "addr2line: DWARF error: can't find .debug_ranges section." et/ou 
"??:?", ??:0"), la fonction remplace "???" par "gnx-utl_sv.adb:1174". Si 
le programme a été compilé par une version Pro ou CE, c'est transparent 
et si add2line n'a pas été trouvé, les "???" sont laissés tels quels.

C'était le seul obstacle pour abandonner CE 21 (GNAT 10 & GnatStudio 22) 
pour le GNAT 11 FSF de Alire et le GnatStudio 23 de la rolling release 
AdaCore, ce nouvel environnement est plus à jour et encore mieux fini. 
GnatStudio 23 est plein de bonnes petites surprises et l'amélioration de 
la fiabilité et de la finition sont notables sur les dernières versions.

Pas encore poussé ce patch (de 10 lignes) dans le github Sowebio mais ça 
va venir. Dans un second temps, addr2line pourrait être embarqué dans le 
binaire grâce à l'utilitaire de Stéphane Carrez et auto-décompressé à la 
volée si nécessaire. Dans un troisième temps, on pourrait tenter de 
faire comme AdaCore. addr2line est "juste" (sic) un analyseur d'info de 
debug DWARF. Il pourrait même être recodé en Ada...

Stef


-- 
Stéphane Rivière
Ile d'Oléron - France

_______________________________________________
Ada-france mailing list
[email protected]
https://mail.ada-france.org/cgi-bin/mailman/listinfo/ada-france
OpenPGP_0x68A4C5C1D498F92F.asc (application/pgp-keys, 3.1 KB)
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=smkS
-----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature (application/pgp-signature, 840 B) - not displayed