36 votes

gcc -g vs not -g et strip vs pas strip, performances et utilisation de la mémoire?

Si la taille du fichier binaire n’est pas un problème, existe-t-il des inconvénients à utiliser -g et à ne pas supprimer les fichiers binaires à exécuter dans un environnement critique de performances? J'ai beaucoup d'espace disque, mais le binaire nécessite beaucoup de ressources processeur et utilise beaucoup de mémoire. Le binaire est chargé une fois et reste en vie pendant plusieurs heures.

MODIFIER:

La raison pour laquelle je veux utiliser des fichiers binaires avec des informations de débogage est de générer des vidages de mémoire utiles en cas d'erreur de segmentation.

30voto

Simon Richter Points 11471

Le chargeur ELF charges segments, pas de sections; la correspondance entre les sections de segments est déterminé par l'éditeur de liens de script utilisé pour la construction de l'exécutable.

La valeur par défaut de l'éditeur de liens script n'a pas la carte de débogage sections à n'importe quel segment, donc ce n'est omis.

Symbole d'information est disponible en deux saveurs: les symboles statiques sont traitées à l'extérieur de la bande et de ne jamais stockées en tant que données de la section; symbole dynamique tables sont générées par l'éditeur de liens, et ajout d'un segment spécial qui est chargé avec l'exécutable, comme elle doit être accessible à l'éditeur de liens dynamique. L' strip commande ne supprime que les symboles statiques, qui ne sont jamais référencé dans un segment de toute façon.

Ainsi, vous pouvez utiliser l'ensemble des informations de débogage à travers l'ensemble du processus, et cela n'aura pas d'incidence sur la taille de l'exécutable de l'image dans la mémoire vive, car il n'est pas chargé. Cela signifie également que l'information n'est pas compris dans les décharges, si cela ne vous donne pas toutes les prestations ici.

L' objcopy utilitaire a une option spéciale pour copier uniquement les informations de débogage, de sorte que vous pouvez générer un second ELFE fichier contenant ces informations et les utiliser dépouillé binaires; lors de l'analyse du vidage de la mémoire, vous pouvez ensuite charger les deux fichiers dans le débogueur:

objcopy --only-keep-debug myprogram myprogram.debug
strip myprogram

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X