Question

Quelles sont les étapes et les techniques pour déboguer un blocage apparent dû à un blocage dans un processus de production Win32. J'ai entendu dire que WinDbg pouvait être utilisé à cette fin, mais pourriez-vous indiquer clairement comment cela peut être accompli?

Était-ce utile?

La solution

This post devrait vous permettre de commencer à utiliser les différentes options .. Consultez les publications étiquetées avec le débogage ..

Un autre article utile sur les impasses de débogage ..

Autres conseils

Déboguer un véritable blocage est en fait assez facile si vous avez accès à la source et à un vidage de la mémoire (ou à une session de débogage en direct).

Tout ce que vous faites est de regarder les threads et de trouver ceux qui attendent une sorte de ressource partagée (par exemple, attendre dans WaitForSingleObject ). En règle générale, à partir de là, il vous suffit de déterminer quels sont les threads qui se sont verrouillés, puis il vous suffit de déterminer lequel a brisé la hiérarchie.

Si vous ne pouvez pas facilement savoir quels threads sont verrouillés, utilisez la méthode indiquée dans cet article ici pour tracer la chaîne de verrouillage de chaque fil. Lorsque vous entrez dans une boucle, les threads de la boucle sont ceux qui sont dans l’impasse.

Si vous êtes très paresseux, vous pouvez installer Application Verifier, puis ajouter votre module et sélectionner simplement "verrous". du test de base. vous pourrez alors exécuter votre application sous n’importe quel débogueur.
si une impasse critique se produit, vous devez trouver la raison tout de suite.

Quelle langue / IDE utilisez-vous?

En .Net, vous pouvez afficher les threads d’une application: Debug- > Windows- > Threads ou Ctrl + Alt + H

Le débogage des blocages peut être délicat. Je fais habituellement une sorte de journalisation et vois où le journal s'arrête. Je me connecte à un fichier ou à la console de débogage à l'aide de OutputDebugString ().

La meilleure chose à faire est de commencer par ajouter des instructions de journalisation. En règle générale, je ne recommanderais que les ressources partagées qui sont dans une impasse, mais leur ajout pourrait également indiquer des situations ou des zones de code inattendues. Le problème très médiatisé de la base de données stackoverflow.com s’est avéré être log4net! L'équipe stackoverflow ne s'est jamais doutée de log4net, et seulement en examinant la journalisation (ironiquement) l'a montré. Dans un premier temps, je m'abstiendrais de tout outil compliqué, par exemple WinDgb, car son utilisation n'était pas très intuitive à mon humble avis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top