9

Je veux être en mesure de voir un horodatage au début de chaque trace dans la fenêtre de débogage dans Visual Studio.Fenêtre de débogage Visual Studio 2008 pour afficher l'horodatage?

[Time stamp here] The thread 'Win32 Thread' (0xcd0) has exited with code 0 (0x0). 

[Time stamp here] => CLR ProvideAssembly: AppDomainId: 1, Ref: 'msvcm90d... 

exemple de ceci est l'application Sysinternals - DebugView. Le problème est que je ne peux pas déboguer Visual Studio, et écouter DebugView en même temps, et je ne suis pas à l'aise avec l'ajout de l'horodatage manuellement à mes traceurs.

Répondre

7

Étant donné que le texte de la fenêtre de sortie est en lecture seule une fois écrit, il n'existe pas de moyen facile de faire exactement ce que vous voulez faire. Cependant, il est facile de faire quelque chose de similaire: ajouter une ligne d'horodatage après le nouveau texte est écrit dans la fenêtre de sortie. Cela rendra la fenêtre de sortie beaucoup plus désordonnée, mais vous obtiendrez vos horaires.

Voici comment cela fonctionnerait: Tout d'abord, créez un complément Visual Studio ou une macro qui connecte l'événement PaneUpdated du volet actif de la fenêtre Outlook. (Voir this thread pour savoir comment faire avec une approche macro). Assurez-vous de vérifier, dans le gestionnaire d'événements, que pane.Name == "Debug" et ignorez les autres volets. En second lieu, lorsque vous détectez un nouveau texte dans le volet de sortie de débogage, ajoutez une ligne d'horodatage, comme ceci:

public void AddTimestamp(DTE2 dte) 
{ 
    // Retrieve and show the Output window. 
    OutputWindow outWin = dte.ToolWindows.OutputWindow; 

    pane = outWin.OutputWindowPanes.Item("Debug"); 
    } 
    catch 
    { 
     pane = outWin.OutputWindowPanes.Add("Debug"); 
    } 

    pane.OutputString("[timestamp: " + DateTime.Now.ToString() + "]\n"); 
} 

Il est également possible d'effectuer une pré-Pend un horodatage à chaque ligne, mais il est beaucoup plus difficile. Vous ne pouvez pas modifier le texte déjà dans la fenêtre de sortie (il est en lecture seule), mais vous pouvez effacer la fenêtre et vous pouvez ajouter du texte. Vous pouvez donc utiliser la même approche de gestionnaire d'événements pour détecter les modifications de texte, mais vous pouvez copier le texte en cours, ajouter des horodatages aux lignes qui n'ont pas encore d'horodatage, effacer la fenêtre et ajouter à nouveau le maintenant. -avec un horodatage. Le problème avec ceci est la performance une fois que votre fenêtre de sortie devient grande. Donc, vous devrez probablement implémenter une sorte de "marquage paresseux" qui efface et insère en arrière-plan, afin d'éviter de tuer votre EDI lorsque (100 fois) des lignes de sortie de débogage sont émises en peu de temps . En outre, lorsque vous supprimez et réajoutez, si vous sélectionnez actuellement du texte dans la fenêtre de sortie, votre sélection est perdue.

Personnellement, je ferais simplement la chose facile et ajouterai des lignes d'horodatage plutôt que l'approche de pré-pendaison plus difficile. Comme les choses à la fin de la ligne sont difficiles à voir sans défilement, je ferais probablement en sorte qu'il y ait une nouvelle ligne avant l'horodatage, donc l'utilisateur verrait chaque lot d'une ou plusieurs lignes de sortie suivies par une ligne d'horodatage.

Il est possible qu'il existe un moyen d'accrocher la fenêtre de sortie avant l'affichage du texte, mais je n'ai trouvé aucun point d'extensibilité de ce type dans les API VS Extensibility.

Encore une idée: vous pouvez toujours lancer votre propre fenêtre d'outils, par ex. "Sortie de débogage d'Ivan" qui écoute les événements provenant de la fenêtre de sortie réelle, et répercute les nouvelles lignes (avec horodatage) dans votre propre fenêtre d'outils. C'est probablement l'option la plus difficile, mais devrait faire exactement ce que vous voulez.

+0

@Justin Je regardais cette extensibilité aussi. La fin de la ligne n'est pas très agréable, car les lignes ont des longueurs différentes et c'est très difficile à lire. La repeindre de la fenêtre est un tueur comme vous le dites ... Merci pour votre réponse, mais je cherche vraiment à trouver comment le faire, même si son hackish. –

+0

Oui, au lieu de fin de ligne, si vous y allez avec une solution d'ajout seulement, je suggérerais de planter l'horodatage sur une nouvelle ligne - cela double le nombre de lignes de la fenêtre de sortie, mais c'est mieux (IMHO) que d'avoir des horodateurs enterrés à la fin de la ligne. De plus, il n'est même pas possible de planter le texte à la fin de la ligne, si les nouvelles lignes sont déjà émises dans le document avant de prendre le contrôle. –

+0

Encore une idée: vous pouvez toujours lancer votre propre fenêtre d'outils, par ex. "Sortie de débogage d'Ivan" qui écoute les événements provenant de la fenêtre de sortie réelle, et répercute les nouvelles lignes (avec horodatage) dans votre propre fenêtre d'outils. C'est probablement l'option la plus difficile, mais devrait faire exactement ce que vous voulez. –

2

Je cherchais les mêmes fonctionnalités. Mon collègue a trouvé la macro dans le champ de message, imprimant les ticks de cpu 'actuels'.

Jetez aussi un coup d'œil à these tips from Simon Chapman.