2010-10-17 8 views
2

Quels outils gratuits puis-je utiliser pour déboguer les programmes multithreads créés à l'aide de la bibliothèque pthread sous Linux? (Outre le papier &, bien sûr ...)Outils de débogage pour les applications multithread

La façon habituelle d'imprimer des messages de débogage ne fonctionne pas très bien.

Répondre

2

Déboguer des programmes concurrents est intrinsèquement difficile, car l'outil de débogage a tendance à modifier la planification (le rendant souvent plus apte à faire disparaître le bogue).

Une technique avec laquelle j'ai eu du succès est de se connecter à une structure de données et non protégée par un verrou. Ensuite, une fois le système inactif, imprimez la structure de données ou examinez-la dans un débogueur. L'important est d'éviter de faire un appel système ou d'invoquer une primitive de synchronisation lors de la journalisation, de sorte que la journalisation ait une influence minimale sur le planificateur.

static char *log_buffer[LOG_BUFFER_LENGTH]; 
static size_t log_index; 
#define LOG(message) (log_buffer[log_index++] = (message)) 

Si votre thread est interrompu au milieu de la journalisation, le tampon du journal devient incohérent. C'est assez improbable pour être utile pour le débogage, mais il faut le garder à l'esprit. Je n'ai jamais essayé cela sur une machine multiprocesseur; Je m'attendrais à ce que le manque de synchronisation rende la mémoire tampon du journal inconsistante très rapidement dans la pratique¹.

¹ Ce qui est une raison de plus de ne pas faire la programmation multithread sur les machines multiprocesseurs. Utilisez le passage de message à la place.

1

À la fois le débogueur GNU gdb et ses threads de support graphique ddd frontaux.

Questions connexes