Bonjours a tous
Y a t-il un moyen de tracer la pile de tous les threads d'un process en C#
Merci pour votre aide
Bonjours a tous
Y a t-il un moyen de tracer la pile de tous les threads d'un process en C#
Merci pour votre aide
C'est à dire ?
Soit plus claire... car j'ai peur de pas comprendre.
quoi qu'il en soit, seul le thread, en cours peut accèder au tracé de sa pile grâce à System.Diagnostics.StackTrace... sinon se serait trop facile
Cependant je ne saurais trop déconseiller l'usage de StackTrace car ce mécanisme est très lent... de plus StackTrace ne trace pas la totalité de la pile d'appel, pour peu par exemple que certaines méthodes soient "inlinés" et vu qu'elles ne sont plus réellement appelées et bien elles napparaissent pas dans la pile... Donc ce n'est pas fiable à 100% si tu souhaite connaitre ou déboguer le passage dans les diverses fonction de ton assembly.
Le but c'est de tracer la pile de tous les threads de l'application en cours, ou au moins d'un thread donné.
Le problème c'est que l'IHM se freeze mais on ne sait pas pourquoi. Par contre on arrive à détecter le freeze. Donc le but c'est de tracer la pile du thread principal de l'IHM au moment du freeze.
est ce que votre ihm est en STAThread ou en MTAThread ?
le probleme c'est que STACKTRACE ne permet de récupérer la trace de pile que du thread qui l'invoque, pas d'un autre à ma connaissance.
est ce que tu as d'autres threads, et des accès concurrenciels à des ressources ?
des sections protégées avec des monitor.enter/exit ou autre mécanisme de synchro ?
si oui il y a peut etre une deadlock ou ton thread d'ihm est bloqué due au fait que quand tu n'utilise pas la commande "lock" de C# il faut faire attention à ce que ton thread libére SYSTEMATIQUEMENT le verrou posé, ce qui n'estpas fait si ta un return en cours de route ou une exception et ke tu ne met pas le deverrouillage dans un finally, ce qui fait que tout autre tentative de lock ou de monitor.enter sera bloquant et freeze le thread.
Salut,
je ne sais pas si ca va t'aider, mais j'avais cette source qui trainait dans mes bookmarks. C'est une lib de detection de deadlock, qui masque la classe monitor du framework (donc normalement, tu ne touches pas ton code). Je n'ai pas du tout testé mais cela peut peut-etre t'aider.
Bon courage.
Partager