Débogage des fichiers principaux sur différentes distributions Linux
Lorsqu'un fichier principal est généré sur une distribution Linux différente de votre environnement de développement, la trace de la pile n’est peut-être pas entièrement significatif. Les exécutables liés dynamiquement reposent sur des adresses au sein de bibliothèques partagées, et ces adresses peuvent varier d'une distribution à l'autre. GDB peut attribuer à tort le crash aux fonctions de votre copie de la bibliothèque, alors que le système du client peut avoir une fonction différente à la même adresse.
Pour valider l'exactitude de la trace de la pile, le désassemblage de la fonction en question peut révéler que l'adresse s'inscrit dans une instruction ou est précédée d'une instruction non-CALL. Dans de tels cas, la trace de la pile n'est pas fiable.
Pour obtenir une trace plus précise, vous pouvez demander au client de fournir les bibliothèques suivantes utilisées par le binaire problématique :
cd / tar cvzf to-you.tar.gz lib/libc.so.6 lib/ld-linux.so.2 ...
Sur votre système :
mkdir /tmp/from-customer tar xzf to-you.tar.gz -C /tmp/from-customer gdb /path/to/binary (gdb) set solib-absolute-prefix /tmp/from-customer (gdb) core core # Important: Set solib-... before loading core (gdb) where # Get meaningful stack trace!
Débogage avec des binaires optimisés
Au lieu de conseillant aux clients d'exécuter un binaire -g, une approche privilégiée consiste à créer le binaire avec les indicateurs d'optimisation -g et -O2 et à supprimer les informations de débogage avant la distribution :
build with -g -O2 -o myexe.dbg strip -g myexe.dbg -o myexe distribute myexe to customers when a customer gets a core, use myexe.dbg to debug it
Cela permet un débogage symbolique complet ( fichier/ligne, variables locales) sans partager les détails sensibles du code source.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!