Aperçu
nm analyse la table des symboles dans les fichiers objets et affiche le nom, le type, l'adresse de chaque symbole, etc. Il est utile pour diagnostiquer les problèmes de liaison, vérifier le contenu des bibliothèques et analyser l'optimisation du code.
Fonctionnalités principales
- Afficher la liste des symboles d'un fichier objet
- Identifier le type de symbole (fonction, variable, défini, indéfini, etc.)
- Fournir des informations sur l'adresse et la taille des symboles
- Support du démanling des noms C++
Options principales
La commande nm offre diverses options pour filtrer la liste des symboles et contrôler le format de sortie.
Filtrage des symboles
Format de sortie
Commande générée :
Essayez de combiner les commandes.
Description:
`nm` Exécute la commande.
Essayez d'exécuter virtuellement les commandes avec l'IA en combinant les options ci-dessus.
Exemples d'utilisation
Découvrez différentes manières de vérifier les informations de symboles des fichiers objets à l'aide de la commande nm.
Afficher la liste des symboles de base
gcc -c main.c -o main.o
nm main.o
Affiche tous les symboles d'un fichier exécutable ou objet compilé dans un format de base.
Afficher uniquement les symboles indéfinis
nm -u main.o
Utile pour diagnostiquer les problèmes de liaison en affichant uniquement les symboles indéfinis, tels que les fonctions ou variables externes non liées.
Démangling des symboles C++
g++ -c my_class.cpp -o my_class.o
nm -C my_class.o
Convertit les noms de symboles complexes des fichiers objets C++ en un format lisible par l'homme.
Afficher avec la taille des symboles
nm -S main.o
Affiche la taille (en octets) occupée par chaque symbole, ainsi que son adresse.
Conseils et précautions
Conseils et points à considérer pour utiliser efficacement la commande nm.
Caractères de type de symbole
Les caractères affichés à côté de chaque symbole dans la sortie de nm indiquent le type du symbole. Les majuscules indiquent les symboles globaux, les minuscules indiquent les symboles locaux.
- A : Symbole absolu (Absolute)
- B/b : Section de données non initialisées (BSS)
- D/d : Section de données initialisées
- T/t : Section de texte (code)
- U : Symbole indéfini (Undefined)
- W/w : Symbole faible (Weak)
Utilisation pour le débogage
nm est très utile pour diagnostiquer les erreurs de l'éditeur de liens ou pour vérifier si une fonction ou une variable spécifique est correctement incluse dans une bibliothèque. L'option -u en particulier aide à résoudre les problèmes de liaison en trouvant les références indéfinies.