Maison > développement back-end > C++ > Comment puis-je déboguer avec précision les fichiers de base générés sur différentes distributions Linux ?

Comment puis-je déboguer avec précision les fichiers de base générés sur différentes distributions Linux ?

DDD
Libérer: 2024-12-17 06:35:25
original
236 Les gens l'ont consulté

How Can I Accurately Debug Core Files Generated on Different Linux Distributions?

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 ...
Copier après la connexion

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!
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal