2008-09-18 5 views
5

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

8

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 ..

0

Quelle langue/IDE utilisez-vous?

Dans .Net, vous pouvez voir les fils d'une application: Debug-> Windows-> Threads ou Ctrl + Alt + H

0

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().

4

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.

-1

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.

1

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.

Questions connexes