gdb techniques de débogage

gdb techniques de débogage


1? Déboguer avec gdb

Debugger
lors de l' exécution d' une erreur (bug) apparaît, nous avons besoin de déboguer le programme, identifiera les erreurs d'adresse (debug)
Référence: « pas à pas » (méthodes VC ci - dessous débogueur)

des outils de débogage divisés en deux:
(1) 单步调试: en utilisant le débogueur, les points d' arrêt de liaison a été variables observées et la mémoire.
(2) 打印调试: La fonction de la touche de sortie d'informations printf comme l' analyse

gdb débogage
débogage pas à pas avec la ligne de commande gdb sous Linux
Préparation: Dans la compilation de cette étape, ajoutez 选项‐g
g ++ -g main.cpp -o helloworld
ou
% .o:% Cpp
[Tab] G ++ -c -g-MMD $ < -o $ @

commande de contrôle de classe
dans l'interface GDB en utilisant des commandes pour manipuler le processus de débogage. gdb ./helloworld 进入gdb界面
b (break): Ajouter un point d' arrêt
r (run): Exécutez le redémarrage programme
n (suivant): Next
c (continuer): programme continue de fonctionner jusqu'à ce que le point d' arrêt suivant, le programme ou la fin de la course
q (quitter): Sortie interface de programmation
(Remarque: le nom complet peut être entré pause, ne peut entrer b)

Ajouter un point d' arrêt:
b principal (plus le nom de la fonction)
b main.cpp: 12 (nom + numéro de ligne)
b 12 (le numéro de ligne du fichier en cours)
b Créer objet :: (nom + fonction membre de classe)
affiche les informations de point d' arrêt break
suppression des points d' arrêt del coupure 2 (derrière n ° 2)

à côté de la prochaine étape
n à l'étape suivante
n 3 effectue les trois étapes suivantes

affichage variable / mémoire
p (impression) , la valeur d'affichage de l'expression
PA
p a+b
P (* Object) P1-> A
plus des utilisations particulières, comme un affichage d'appel de fonction
p ( "% d", ' A')

affichage variable / mémoire
AFF (affichage) variables de contrôle (chaque étape est effectuée sont affichées), ce qui équivaut à regarder au VC

affichage de la valeur de mémoire x ,
x/16xb buf
dans laquelle
16: 16 unités
x: affichage hexadécimal (de xdufs ...)
B: unités de 1 octet (facultatif bhwg)
octets, demi-mot, Word, Giant

Voir Aide
Aide le X-
info Aide
peut afficher une aide sous-commande

Résumé:
1, préparation de débogage GDB
2, la commande de contrôle de classe
3, commande de classe Voir

? 2? Erreurs et vidage de la mémoire

erreur Segment Segment de défaut
Sous Linux, si le programme était opération de pointeur incorrect, le programme se bloque, ce qui suggère « Segment de défaut »

Par exemple, null accès pointeur, accès pointeur sauvage, un tableau d'accès transfrontalier. . .
P = NULL * int;
. * P = 1;
pointeur sûr
erreur (erreurs, le noyau sous - évaluées)

Segmentation fault localiser
un, si cette erreur est facile à reproduire, utiliser gdb
gdb HelloWorld
section invites où l'erreur est survenue
Programme signal reçu SIGSEGV, Segmentation Fault.
0x0804844a dans le test (P- = 0x0) AT main.cpp: 5
5 * p = 12; a ce moment , le programme est terminé anormalement

informations pile bt (backtrace) pour voir l'erreur de temps

Vidage de la mémoire
Deuxièmement, cette erreur est pas facilement reproductible
programme se déroule pendant toute l' année, ne savent pas quand l'erreur de segment se produit, le programme se ferme de façon inattendue.
Vous pouvez utiliser des moyens « de vidage de la mémoire » pour restaurer la position d'erreur de segment de vue produit.

Vidage de la mémoire

  1. Dans la coquille de l' exécution du programme (Terminal) dans la commande Exécuter
    ulimit -c unlimited
    (Remarque: Après le redémarrage de la coquille fermée, pour être ré-exécuter une fois)

  2. Exécutez le programme
    lorsque l'erreur de bloc se produit, le programme se termine, en même temps que la décharge (dump) lorsqu'une erreur se produit à un noyau. * Fichiers.

  3. Gdb pour voir ce qui se passe avec la position de code d'erreur de segment
    de noyau helloworld. ***

Résumé:
1, erreur de segmentation
2, un vidage de la mémoire

3? Gdb Supplément débogage

Résumé
(1) Quel genre de programme est déboguée?
(2) Quelles sont les situations pour le débogage avec GDB? Qu'est - ce pas l'endroit?

Les informations de débogage dans le programme
lorsque l'option -g lorsque le programme est compilé, le programme peut être débogué
en fait, lorsqu'il est compilé avec l'option -g, le compilateur sera “调试信息”ajouté au programme cible et, par conséquent, le volume du programme cible de changement significativement grande.
Comparaison du volume de la sortie du programme cible:
G ++ main.cpp -o HelloWorld -g
G ++ main.cpp -o HelloWorld

Alors, comment déterminer si un programme avec une « des informations de débogage » moyenne?
La première méthode: (vue directe)
objdump -h HelloWorld
: (Note gcc g ++ gdb objdump nm ar ld ... est un ensemble d'outils) le
segment commencera par un groupe de .debug
deuxième méthode: gdb helloworld
Si la volonté d'informations de débogage Conseil:
lecture des symboles de la HelloWorld ... ( no debugging symbols found) ... FAIT.

Les informations de débogage a enregistré ce que les choses?
- au moins enregistrer le fichier source et le numéro de ligne

scénarios d'utilisation gdb
applications possibles:
- Tests unitaires (codes de fonction simple fonction)
- l'erreur de la section de positionnement
ne sont pas reprises applicables:
- de grands programmes,
- en particulier les procédures utilisées dans le multi-thread
- pas à pas lorsque le problème ne peut être reproduit que lorsque le fonctionnement normal de la reproduction
(我们使用打印调试)

Résumé:
1, gdb débogage principe
2, le débogage gdb et imprimer des applications

Ressources d'apprentissage 《C语言/C++学习指南》Linux开发篇

Publié six articles originaux · louanges gagnées 0 · Vues 67

Je suppose que tu aimes

Origine blog.csdn.net/qq_46165724/article/details/104761162
conseillé
Classement