Visual Studio comment sérialiser l'objet à partir du débogueur
Je suis en train d'étudier un bug dans un crash dump (donc je ne peux pas changer le code).
J'ai vraiment compliqué objet (milliers de lignes dans la représentation sérialisée) et son état est incompatible. Pour enquêter sur son état le débogueur Visual Studio vue est inutile. Mais l'objet a un contrat de données. Je tiens à sérialiser et ensuite utiliser mon éditeur de texte favori pour naviguer à travers l'objet. Est-il possible de faire à partir du débogueur?
- Notez que, si vous avez quelques conteneur personnalisé de classe, ou une autre classe de ce que vous voulez voir à de nombreuses reprises au cours de débogage, mais l'IntelliSense et QuickView ne peut pas comprendre, vous pouvez écrire une extension pour VS qui aide à montrer votre classe personnalisée en debug.
- Beaucoup de bonnes techniques peuvent également être trouvés [ici] (stackoverflow.com/questions/360277/...)
Vous devez vous connecter pour publier un commentaire.
Il y a quelques temps, j'ai écrit ce one-liner de la sérialisation d'un objet dans un fichier sur le disque. Copier/coller dans votre fenêtre d'exécution, et de les remplacer
obj
(il est référencé deux fois) avec votre objet. Il vous permettra de gagner untext.xml
fichier àc:\temp
, le modifier à votre convenance.De ne pas attendre toute la magie bien que, si l'objet ne peut pas être sérialisé, il va lever une exception.
identifier "System" is undefined
Avec un peu de chance vous avez Json.Net en vous appdomain déjà. Auquel cas la pop dans votre fenêtre d'exécution:
Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)
Ici est une extension de Visual Studio qui vous permettra de faire exactement cela:
https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f
Vous pouvez obtenir en sortie JSON, XML ou C#
J'ai une extension de la méthode que j'utilise:
Je le surcharger avec une chaîne pour saveTo et de l'appeler à partir de la fenêtre d'exécution:
Il pourrait être possible d'utiliser la fenêtre exécution pour sérialiser et puis copier le contenu dans votre éditeur de texte favori.
Une autre option est de remplacer la
ToString()
de la méthode et de l'appeler en mode débogage.Vous pouvez également écrire le contenu d'un fichier peu de temps avant le crash, ou placer le code dans un try/catch et écrire le fichier puis. Je suis en supposant que vous pouvez déterminer quand il plante.
Une variation sur la réponse de Omar Elabd --
Ce n'est pas gratuit, mais il y a un essai gratuit de OzCode
(https://marketplace.visualstudio.com/items?itemName=CodeValueLtd.OzCode).
Il est intégré dans l'exportation au format JSON dans le contexte/hover du menu il y a, et il fonctionne un peu mieux que l'Objet de l'Exportation de l'extension (le compromis pour elle de ne pas être libre).
http://o.oz-code.com/features#export (demo)
Je sais que c'est quelques années après le fait, mais je vais la laisser une réponse ici, parce que cela a fonctionné pour moi, et quelqu'un d'autre peut le trouver utile.
L'utiliser dans Visual Studio "Immédiate" de la fenêtre, remplacement de
c:\directory\file.json
avec le chemin complet du fichier dans lequel vous souhaitez écrire le JSON etmyObject
avec votre variable serialise:Dans le cas où vous avez une référence circulaire, exécutez-le dans la Fenêtre exécution:
J'ai été en utilisant ObjectDumper.Net.
Il fonctionne bien, surtout si vous avez de vivre des tests unitaires. Je peux afficher la valeur d'une variable dans la console lors d'un test, me sauver de débogage manuellement.
Cette peuvent vous aider si vous êtes en utilisant XUnit.
Une variation sur Alexey réponse. Un peu plus compliqué, mais n'implique pas écrire dans un fichier texte:
1) Dans la Fenêtre entrée:
2) Dans la Fenêtre Watch entrer deux montres:
Après vous entrez dans le deuxième quart (le Sérialiser), le stringWriter montre la valeur sera définie à l'obj sérialisé en XML. Copier et coller. Notez que le XML va être placée entre accolades, {...}, de sorte que vous aurez besoin de les supprimer si vous souhaitez utiliser le format XML pour rien.