Quelles sont les étapes et les techniques pour déboguer un blocage apparent en raison d'un blocage dans un processus de production Win32. J'ai entendu que WinDbg peut être utilisé à cette fin, mais pourriez-vous s'il vous plaît fournir des indications claires sur la façon dont cela peut être accompli?Diagnostic des interblocages dans le programme Win32
Répondre
Ce post devrait vous aider à démarrer sur les différents options..Check les posts tagués avec .. Debugging
Un autre article utile sur debugging deadlocks ..
Quelle langue/IDE utilisez-vous?
Dans .Net, vous pouvez voir les fils d'une application: Debug-> Windows-> Threads ou Ctrl + Alt + H
interblocages Debugging peut être difficile. En général, je fais une sorte de journalisation et je vois où le journal s'arrête. Je me connecte à un fichier ou à la console de débogage en utilisant OutputDebugString().
Déboguer un vrai blocage est en fait assez facile, si vous avez accès à la source et un vidage de la mémoire (ou session de débogage en direct). Tout ce que vous faites est de regarder les threads, et de trouver ceux qui attendent sur une sorte de ressource partagée (par exemple suspendu en WaitForSingleObject
). D'une manière générale à partir de là, il s'agit de déterminer quels deux ou plusieurs threads se sont bloqués l'un l'autre, et ensuite il suffit de deviner lequel a enfreint la hiérarchie de la serrure.
Si vous ne parvenez pas à déterminer quels threads sont verrouillés, utilisez la méthode indiquée dans this post here pour tracer la chaîne de verrouillage pour chaque filetage. Lorsque vous entrez dans une boucle, les threads dans la boucle sont ceux qui sont bloqués.
La meilleure chose à faire est de commencer par ajouter des instructions de journalisation. En règle générale, je recommande seulement autour des ressources partagées qui sont dans l'impasse, mais aussi en les ajoutant en général pourrait pointer vers des situations ou des zones de code que vous n'attendiez pas. Le problème de base de données stackoverflow.com, très médiatisé, s'est révélé être log4net! L'équipe de stackoverflow n'a jamais suspecté log4net, et seulement en examinant la notation (ironiquement) a montré ceci. Je voudrais d'abord renoncer à des outils compliqués, par exemple, WinDgb, car leur utilisation n'est pas très intuitive à mon humble avis.
Si vous êtes très fainéant, vous pouvez installer Application Verifier, puis ajouter votre module et sélectionner simplement "verrous" du test de base. puis vous pouvez exécuter votre application sous n'importe quel débogueur.
si un blocage de section critique vous arrive avec trouver la raison tout de suite.
- 1. fusionner par programme le fichier .reg dans le registre win32
- 2. Diagnostic des manifestes d'application Windows
- 3. Petit hexagone dans le diagnostic GHKit, pourquoi?
- 4. Diagnostic des erreurs CLR dans l'Observateur d'événements Windows
- 5. Générer par programme une DLL C Win32
- 6. Comment lire une caméra vidéo dans un programme win32 C
- 7. Un programme WIN32 peut-il s'authentifier dans le système d'authentification Django en utilisant MYSQL?
- 8. Quand utiliser le 'contexte de diagnostic imbriqué' (NDC)?
- 9. Conseils sur PHP Problème de diagnostic?
- 10. gethostbyname d'erreur win32
- 11. Utilisation de win32 dans le code managé
- 12. L'assemblage de GCC d'un programme vide sur x86, win32
- 13. Obtenir un programme Win32 demander un débogueur au démarrage?
- 14. Définition par programme d'un fichier PNG dans un contrôle d'image dans les API Win32
- 15. Quelle est une bonne façon de définir sur le diagnostic des problèmes de connexion ASP.NET?
- 16. Logging Commons and Mapped Diagnostic Contexte
- 17. Comment obtenir une gestion efficace des interblocages Sql Server en C# avec ADO?
- 18. Accrocher dans win32
- 19. Erreur étrange dans le programme
- 20. Doute dans le programme JavaMail
- 21. Comment puis-je déterminer par programme les capacités d'un lecteur optique dans Win32
- 22. Win32 Commport Sniffing
- 23. trouver des données reçues dans le programme de socket
- 24. installation et l'enregistrement des bibliothèques OpenSSL win32
- 25. Enregistrement de classes Windows Win32
- 26. Dessin sur le fond d'écran (WIN32)
- 27. SQL Server comme prérequis dans le programme d'installation de VS Erreur de projet dans Windows Vista
- 28. Comment créer FILETIME dans Win32?
- 29. Comment ajouter des contrôles aux skins dans l'API win32
- 30. OpenThread() Retourne NULL Win32