Maison  >  Article  >  Opération et maintenance  >  Méthodes de configuration courantes pour utiliser GDB pour déboguer des programmes multithread sous Linux

Méthodes de configuration courantes pour utiliser GDB pour déboguer des programmes multithread sous Linux

WBOY
WBOYoriginal
2023-07-04 14:49:101790parcourir

Méthodes de configuration courantes pour utiliser GDB pour déboguer des programmes multithread sous Linux

Introduction :
Dans la programmation multithread, le débogage est une tâche essentielle. GDB est un puissant débogueur qui peut nous aider à localiser et à résoudre les erreurs dans les programmes multithread. Cet article présentera les méthodes de configuration courantes pour utiliser GDB pour déboguer des programmes multithread sous Linux et fournira des exemples de code, dans l'espoir d'aider les lecteurs à mieux comprendre et utiliser GDB.

1. Installez GDB
Tout d'abord, nous devons installer GDB dans le système Linux. Entrez la commande suivante dans le terminal pour terminer l'installation :

$ sudo apt-get install gdb

2. Compilez le programme multi-thread
Avant de déboguer un programme multi-thread, nous devons d'abord écrire et compiler un programme multi-thread simple. Voici le code d'un exemple de programme :

#include <stdio.h>
#include <pthread.h>

#define NUM_THREADS 5

void* thread_func(void* thread_id) {
    long tid = (long)thread_id;
    printf("Hello World! It's me, thread #%ld!
", tid);
    pthread_exit(NULL);
}

int main() {
    pthread_t threads[NUM_THREADS];
    int rc;
    long t;

    for (t = 0; t < NUM_THREADS; t++) {
        printf("In main: creating thread %ld
", t);
        rc = pthread_create(&threads[t], NULL, thread_func, (void*)t);

        if (rc) {
            printf("ERROR; return code from pthread_create() is %d
", rc);
            return -1;
        }
    }

    pthread_exit(NULL);
}

Nous enregistrons le code ci-dessus dans un fichier nommé multithread.c et le compilons à l'aide de la commande suivante : multithread.c的文件中,并使用以下命令进行编译:

$ gcc -g -pthread -o multithread multithread.c

其中,-g选项用于在可执行文件中加入调试信息,-pthread

$ gdb multithread

Où, - Le L'option g est utilisée pour ajouter des informations de débogage au fichier exécutable, et l'option -pthread est utilisée pour introduire une bibliothèque multi-thread.


3. Démarrez le débogage de GDB

Après avoir terminé la compilation, nous pouvons utiliser GDB pour démarrer le débogage. Entrez la commande suivante dans le terminal :

(gdb) set print thread-events off

4. Configurez les options de débogage de GDB

Dans GDB, certaines options de débogage peuvent nous aider à mieux déboguer les programmes multithread. Nous pouvons le configurer en entrant la commande suivante :

  1. Définissez le numéro de fil d'affichage
  2. Entrez la commande suivante dans GDB pour définir le numéro de fil d'affichage :
    (gdb) set backtrace limit 10

  1. Définissez la pile d'affichage
  2. Entrez la commande suivante dans GDB pour définir la pile d'affichage :
    (gdb) show scheduling 

  1. Défini pour afficher les informations sur le thread
  2. Entrez la commande suivante dans GDB pour définir l'affichage des informations sur le thread :
    (gdb) set scheduler-locking on

  1. Défini pour afficher l'emplacement du code d'exécution du thread
  2. Entrez la commande suivante dans GDB pour définir l'affichage de l'exécution du thread Emplacement du code :

(gdb) break function_name

5. Définir les points d'arrêt et les points de surveillance

Pendant le processus de débogage, nous pouvons définir des points d'arrêt et des points de surveillance pour contrôler le flux d'exécution du programme. Voici quelques exemples de commandes couramment utilisées :

  1. Définir les points d'arrêt
  2. Entrez les commandes suivantes dans GDB pour définir les points d'arrêt :
    (gdb) delete breakpoints

  1. Supprimer les points d'arrêt
  2. Entrez les commandes suivantes dans GDB pour supprimer les points d'arrêt :
    (gdb) watch variable_name

  1. Définir la surveillance points
  2. Entrez la commande suivante dans GDB pour définir les points de surveillance :
    (gdb) delete watchpoints

  1. Supprimer les points de surveillance
  2. Entrez les commandes suivantes dans GDB pour supprimer les points de surveillance :

(gdb) run

6. Débogage des programmes multithread

Dans GDB, nous pouvons utilisez la commande suivante pour déboguer les programmes multithread :

  1. Démarrez le programme
  2. Entrez la commande suivante dans GDB pour démarrer le programme :
    (gdb) Ctrl+C

  1. Suspendez le programme
  2. Entrez la commande suivante dans GDB pour suspendre le programme Exécution du programme :
    (gdb) info threads

  1. Liste de tous les threads
  2. Entrez la commande suivante dans GDB pour lister tous les threads :
    (gdb) thread thread_id

  1. Passer au thread spécifié
  2. Entrez la commande suivante dans GDB pour basculer vers le thread spécifié :
    (gdb) continue

  1. Continuez à exécuter le programme
  2. Entrez la commande suivante dans GDB pour continuer l'exécution du programme :

rrreee
VII.Résumé

Cet article présente la méthode de configuration courante consistant à utiliser GDB pour déboguer des programmes multithread sous Linux et est équipé d'exemples de code. . En configurant correctement les options de débogage et en utilisant les commandes correspondantes, nous pouvons bien contrôler et localiser les problèmes dans les programmes multithread et améliorer l'efficacité et la précision du débogage. J'espère que cet article pourra aider les lecteurs dans le débogage multithread et inspirer davantage d'apprentissage et de pratique. 🎜

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!

Déclaration:
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