Maison >développement back-end >C++ >Comment déboguer un programme C++ qui plante ?
Les méthodes de débogage des programmes en panne C++ incluent : l'utilisation des options du compilateur pour générer du code déboguable ; l'utilisation du débogueur GDB pour parcourir, inspecter les variables, définir des points d'arrêt et afficher les traces de pile pour garantir que les conditions sont valides ; anomalies pré-accident.
Comment déboguer un programme C++ qui plante ?
Lorsqu'un programme C++ plante, le processus permettant de déterminer la cause du crash et de le réparer est appelé débogage. Voici quelques techniques courantes pour déboguer les programmes qui plantent en C++ :
1. Utilisation des options du compilateur
Compiler votre code à l'aide des options du compilateur (telles que l'indicateur -g
dans g++) peut produire un fichier exécutable contenant des informations de débogage. Cela permet d'utiliser un débogueur (tel que GDB) pour se connecter à un programme en cours d'exécution et y accéder.
2. GDB Debugger
GDB est un puissant débogueur de ligne de commande qui peut être utilisé pour déboguer des programmes C++. En utilisant GDB, vous pouvez :
3. Assertions
Les assertions sont des vérifications dans un programme qui garantissent que la condition est vraie. Si la condition est fausse, le programme s'arrêtera de manière inattendue. Cela permet d'identifier les erreurs ou les entrées invalides dans le programme.
4. Journalisation
La journalisation implique l'écriture d'événements de programme ou d'informations d'erreur dans un fichier. En examinant les fichiers journaux, vous pouvez identifier des conditions ou des erreurs inhabituelles avant qu'un programme ne plante.
Exemple pratique
Considérez le programme C++ suivant qui plante :
#include <iostream> int main() { int* ptr = new int; *ptr = 10; delete ptr; *ptr = 20; // 访问已释放的内存 return 0; }
La compilation et l'exécution de ce programme entraîneront une erreur de segmentation. En utilisant GDB, nous pouvons déboguer le programme comme suit :
$ gdb ./a.out (gdb) run Starting program: /path/to/a.out [New Thread 15676.0x1153570] [New Thread 15677.0x1154ec0] Program received signal SIGSEGV, Segmentation fault. 0x0000555555555527 in main () at main.cpp:9 9 *ptr = 20; // 访问已释放的内存 (gdb) bt #0 0x0000555555555527 in main () at main.cpp:9 #1 0x00007ffff7dc36860 in __libc_start_main (main=0x5555555554e0 <main>, argc=1, argv=0x7fffffffdde8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffddea) at ../csu/libc-start.c:270
La trace de la pile indique que le crash se produit sur la ligne 9, qui tente d'accéder à la mémoire libérée. En examinant les lignes précédentes du programme, nous pouvons identifier l'erreur de gestion de la mémoire qui a provoqué le crash.
Autres conseils
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!