4 votes

Y a-t-il un moyen d'exécuter brièvement le thread de l'interface utilisateur lorsque le thread non interface est arrêté dans le débogueur ?

Lors du débogage des threads d'arrière-plan à l'aide de Visual Studio 2010, existe-t-il un moyen agréable de laisser les autres threads s'exécuter pendant quelques centaines de millisecondes sans faire avancer un thread qui se trouve à un point d'arrêt ? Cela équivaut en fait à insérer "Threading.Thread.Sleep(100)" juste avant la ligne en cours, à placer l'instruction suivante à cet endroit et à cliquer sur "resume" (mais sans modifier le code en cours de débogage) ? Mon code d'enregistrement et d'affichage des paquets n'est pas aussi utile qu'il pourrait l'être, car le débogueur trouve souvent un point d'arrêt entre le moment où mon code a agi sur un paquet et le moment où l'interface utilisateur a réussi à l'afficher.

Je sais qu'il est possible d'aller dans la fenêtre Threads, de geler le fil qui a atteint le point d'arrêt, d'appuyer sur run, d'appuyer sur pause et de dégeler le fil qui a atteint le point d'arrêt, mais c'est vraiment lourd. Existe-t-il un moyen plus simple de faire les choses ?

(Edit)Pourquoi aucune réponse je me demande ? Je ne peux pas croire que je suis la seule personne à essayer de déboguer un fil non IU.

3voto

Dean Taylor Points 2333

J'utiliserais un Macro dans Visual Studio pour effectuer des actions telles que celle que vous décrivez.

Il devrait être simple d'enregistrer la Macro ( Tools , Macros , Record TemporaryMacro ) au bon moment, puis de le sauvegarder.

Vous pouvez toujours ajouter une icône / un raccourci clavier pour relancer la macro à un moment ultérieur.

Vous pouvez même modifier le code source de la macro pour vous assurer qu'elle exécute votre action exactement comme vous le souhaitez.

EDIT #1 : A titre indicatif, j'imagine que le code ressemble un peu à ceci (non testé) :

    Dim t As Thread
    t = DTE.Debugger.CurrentThread
    t.Freeze()
    DTE.Debugger.Go(False)
    Beep()
    Threading.Thread.Sleep(5000)
    Beep()
    DTE.Debugger.Break(True)
    DTE.Debugger.CurrentThread = t;
    t.Thaw()

EDIT #2 : Vous pouvez vous référer à ceci : EnvDTE.Débogueur

Importations standard pour votre référence :

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X