J'ai GDB attaché à une application bloquée avec pthreads. Il y a ~ 10 threads qui sont tous bloqués, et j'aimerais savoir quels verrous sont détenus par quels threads. C'est possible dans WinDbg en utilisant SOS.dll; est-ce possible dans GDB?Can GDB peut-il afficher une liste de mutex pthread détenus par chaque thread?
Répondre
Ce n'est pas GDB que vous devriez poser, mais plutôt la bibliothèque pthread et le système d'exploitation que vous utilisez.
La bibliothèque pthread implémente des mutex en coopération avec le noyau via un ensemble d'appels système. Si son implémentation de mutex incorpore quelque chose pour lier le dernier thread contenant le mutex dans la structure de données mutex, alors vous pouvez utiliser GDB pour obtenir cette information.
Il est possible que votre noyau suive cette information. Sous Mac OS X, par exemple, la collection de scripts GDB livrés avec le kit de débogage du noyau, kgmacros
, comprend une commande showallmtx
qui fera exactement ce que vous voulez. Le catch: pour l'utiliser, vous devez déboguer le noyau de la machine à ce moment-là, ce qui signifie que vous devez faire le débogage en utilisant une machine différente.
Bien sûr, vous pourriez avoir un fichier de périphérique /dev/kmem
, qui vous permettrait de fouiller dans la mémoire du noyau et d'accéder à la structure de données nécessaire, à condition que vous puissiez le localiser.
Mais tout cela dépend vraiment de votre système - votre bibliothèque pthread et votre noyau OS - et non de GDB.
Vous pouvez également essayer de créer un mutex de type PTHREAD_MUTEX_ERRORCHECK
; cela entraînera pthread_mutex_lock()
pour retourner EDEADLK
au lieu de blocage. Vous pouvez alors rompre lorsque cela se produit et s'enraciner dans votre processus non bloqué.
GDB pourrait pouvoir afficher ces informations, mais ils n'ont pas mettre en œuvre cette fonctionnalité: il faut une coopération entre le débogueur et la bibliothèque de threads, bien que la bibliothèque libthread_db.
DBX sous Solaris - au moins - (both de Sun, il aide) implémente correctement ce feature (cherchez les Serrures partie)
Sur au moins une saveur de Linux, C + +11 std :: mutex a un membre appelé __owner qui contient l'identifiant de thread du thread qui a actuellement le mutex verrouillé. L'utilisation de "info threads" dans gdb montre les numéros de thread utilisés par gdb avec les identifiants de threads (voir le numéro "LWP"), vous permettant de passer à ce thread ("thread N"), puis examinez la pile d'appels ("backtrace ").
- 1. Déboguer un interblocage avec pthread mutex (linux)
- 2. quel est "l'attribut" d'un mutex pthread?
- 3. Puis-je utiliser les mutex pthread dans la fonction destructor pour les données spécifiques au thread?
- 4. Obtenez une liste de mutex?
- 5. erreurs de codes thread-mutex C?
- 6. Comment obtenir que GDB fasse une 'liste' après chaque étape?
- 7. Liste des fichiers ouverts détenus par un processus?
- 8. GDB Quirks avec processus de thread
- 9. pthread_t à gdb ID de thread
- 10. afficher une liste de fonctions appelées par un fichier source
- 11. Can gdb attacher automatiquement un processus sur un SIGSEGV
- 12. Pthread Queue System
- 13. Débogage d'un processus de thread à l'aide de gdb/dbx
- 14. comment augmenter la priorité d'un enfant pthread par rapport au thread parent
- 15. Est-ce que 2 variables de condition pthread partagent le même mutex?
- 16. Erreur de retour de valeur pthread
- 17. Comment faire gdb exécuter une fonction définie par l'utilisateur (définie dans .gdbinit) à chaque démarrage?
- 18. Linux - tuer certains processus détenus par apache en toute sécurité
- 19. Automatiser gdb: afficher backtrace à chaque appel à la fonction met
- 20. Win32: Comment obtenir le processus/thread qui possède un mutex?
- 21. Quoi de mieux pour une file d'attente de messages? mutex & cond ou mutex et sémaphore?
- 22. pthread renvoie 251
- 23. Les mutex pthread fonctionnent-ils entre les threads s'ils sont en mémoire partagée?
- 24. MySQL - comment afficher le sujet le plus récent par thread
- 25. Annulation d'un Pthread bloqué
- 26. Utilisation de JQuery chaque boucle pour afficher six éléments de liste par ul dans une div tirée d'un objet JSON
- 27. En utilisant gdb, afficher plusieurs vars dans une ligne?
- 28. une minuterie par thread en utilisant Qt
- 29. Sélection du mutex ou du mutex fictif à l'exécution
- 30. Modélisation boost :: Verrouillable avec sémaphore plutôt que mutex (précédemment intitulé: déverrouillage d'un mutex à partir d'un thread différent)