2008-09-19 5 views
4

Je travaille sur des applications .Net avec plusieurs threads faisant toutes sortes de choses. Lorsque quelque chose ne va pas dans la production, je veux être en mesure de voir quels threads sont en cours d'exécution (par leur nom managé) et aussi être en mesure de les mettre en pause/les tuer.Affichage, mise en pause et suppression des threads dans une application .Net en cours d'exécution

De toute façon pour y parvenir?

VS est pas toujours disponible (même si une bonne option quand est), et l'interface utilisateur WinDbg est pas pour le cœur Lite.

je considérais comme un VS a pendant le débogage, la fenêtre de threads en programme, mais n'a pas pu trouver un moyen de programmation pour le faire. Process.GetThreads renvoie très peu de données utilisables.

Répondre

2

Rien de ce qui est intégré à .net ne le fera. Si vous souhaitez parcourir par programme vos threads actifs, vous devez les enregistrer quelque part au lancement et les désinscrire à la fin ou les filtrer avant d'agir sur eux. Nous avons fait une version de ceci et cela nécessite une quantité de travail non triviale.

0

Vous pouvez attacher un débogueur géré pour afficher/geler les threads, ou utiliser WinDbg avec les extensions SOS si vous voulez quelque chose de plus léger.

0

Vous pouvez utiliser ProcessExplorer pour afficher les threads en cours d'exécution dans un processus par ID et état.

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Utilisez l'onglet "fil" de la fenêtre "Propriétés".

Vous pouvez également tuer des fils et voir la pile de fil

+0

Avec Process Explorer 16.02, il n'affiche pas le nom du thread dans la liste de l'onglet Threads. – Matt

+0

Vous avez raison: J'ai édité ma réponse – olorin

0

Qu'en est-débogage à distance? Il peut être un peu difficile à configurer en raison de la sécurité et de s'assurer que vous avez les bons symboles de débogage.

Remote Debugging Setup

3

discussions Trouver:

using System.Diagnostics; 

ProcessThreadCollection threads = Process.GetCurrentProcess().Threads; 

Vous pouvez tuer généralement gérés à l'aide de fils Thread.Abort(). S'ils sont en Sommeil, Attendez ou Rejoins, vous pourrez même vous en sortir avec le (moins méchant) Thread.Interrupt().

+0

Malheureusement, cela renvoie une collection de ProcessThread, qui n'est pas la même chose qu'un System.Thread; les méthodes auxquelles vous avez fait référence sont sur System.Thread. Je ne suis pas sûr comment obtenir d'un ProcessThread à un System.Thread. : - / –

Questions connexes