Lorsque je travaille sur des threads multithreads, comment puis-je déboguer pour savoir quel thread provoque un comportement anormal? Puis-je utiliser permonitor pour le débogage ou existe-t-il d'autres outils ou fonctionnalités de débogage disponibles?Débogage des threads C#
Répondre
Comme alternative au débogage, vous pouvez effectuer des tests liés au thread. Le livre The Art of Unit Testing a une section à ce sujet dans l'annexe B. L'auteur mentionne trois outils (dont deux qu'il a un intérêt personnel):
Cela dépend de ce que vous entendez par « comportement anormal » ...
pour la plupart du temps, le débogueur studio visuel devrait être suffisant. les fenêtres Threads et CallStack vous donneront beaucoup d'informations sur ce qui se passe.
Pour les travaux lourds, vous pouvez utiliser WinDbg + SOS. Lisez à propos des commandes! threads,! threadpool et! runaway.
- Tips for Debugging Threads De MSDN
- Neat New Multithreaded Debugging Features in VS 2008 par John Robbin
Si vous avez plusieurs threads du même type * vous pouvez modifier votre code pour exécuter un seul de chaque type de fil (ou peut-être mettre dans le fichier de configuration de l'application afin que vous puissiez le changer rapidement pendant le débogage).
Si l'application se comporte toujours mal, alors vous savez qu'il s'agit d'une interaction entre les différents types de threads à l'origine du problème. Si ce n'est pas le cas, il se peut qu'il y ait une ressource que vous n'avez pas verrouillée correctement (par exemple). Ce que j'essaie de dire est de simplifier votre application au point où il utilise le nombre minimum de threads pour toujours être votre conception originale.
* Pas le meilleur mot à utiliser, mais par exemple si vous engendrez 10 threads pour traiter avec le fichier i/o Spawn seulement 1.
Très bonne suggestion M. Chris. – user186973
Comment définissez-vous un comportement anormal? Serait-ce une exception? Je ne sais pas si cela vous aidera, mais ce que je fais souvent, c'est nommer l'objet thread lorsque je le crée, puis si j'attrape une exception ou si certains critères existent, j'écris dans le journal des événements. J'inclus l'heure, le nom de l'application, le nom du thread et les informations d'exception. Je ne l'utilise pas seulement pour le débogage, je l'utilise si un utilisateur se plaint d'un comportement étrange ou signale une erreur. Ensuite, je peux revenir en arrière et obtenir des informations à ce sujet.
- 1. Utilisation des threads en C++
- 2. C# 1.1: Surveillance des threads de travail
- 3. Débogage des services Web ASP.NET C#
- 4. Débogage des conteneurs STL C++ dans Windbg
- 5. Interruption des threads natifs
- 6. Débogage de débogage Eclipse C++ dans STL
- 7. Passer à d'autres threads lors de la session de débogage dans Visual C# Express 2008
- 8. Synchronisation des threads COM avec .NET
- 9. Threads d'arrière-plan en C#
- 10. Planification des threads Swingworker
- 11. Débogage VB.NET comme C#
- 12. Comment verrouiller la console sur des threads dans C# .NET?
- 13. C# joignant des threads en arrière-plan worker DoWork()
- 14. C# Transmettre implicitement SecurityPrincipal personnalisé aux threads
- 15. C: bibliothèque de threads POSIX test-suite
- 16. Énumération des threads dans Windows
- 17. Auto-réparation des threads Python
- 18. Comment créer des threads démon?
- 19. C#, IAsyncResult et le pool de threads
- 20. Débogage C++ managé en C++ natif
- 21. Threads C# pour la manipulation de fichiers
- 22. Connexion des threads dans une application Rails
- 23. WPF Débogage des Datatriggers?
- 24. Débogage des fonctions javascript
- 25. Débogage des scénarios JBehave
- 26. Débogage des questions
- 27. Comment paralléliser les threads dans C pthreads
- 28. Implémentation d'une bibliothèque de threads C++ en C++
- 29. Comment tester la sécurité des threads
- 30. python, affaire amusante avec des threads et des IDEs?
Habituellement il serait plus confortable d'utiliser ces commandes via le panneau Intermediate en VS (pas besoin de lancer WinDbg en tant que processus séparé ..) –
@opc: vous avez raison tant que vous n'avez pas besoin des autres commandes WinDbg. ce qui n'est pas toujours le cas. –