web-dev-qa-db-fra.com

Copier les valeurs d'objet en mode débogage Visual Studio

En mode de débogage Visual Studio, il est possible de passer la souris sur les variables pour afficher leur valeur, puis de cliquer avec le bouton droit de la souris sur "Copier", "Copier l'expression" ou "Copier la valeur".

Si la variable est un objet et pas seulement un type de base, il y a un signe + pour développer et explorer l'objet. Est-ce qu'il y a un moyen de copier tout ça dans le presse-papier?

99
Farinha

Dans la fenêtre immédiate, tapez

?name_of_variable

Ceci imprimera tout, et vous pourrez le copier manuellement où vous le souhaitez ou utiliser les fonctions de journalisation de la fenêtre immédiate pour l'écrire automatiquement dans un fichier.

UPDATE: je suppose que vous demandiez comment copier/coller la structure imbriquée des valeurs afin de pouvoir effectuer une recherche textuelle ou de l'enregistrer sur le côté, puis de comparer ultérieurement l'état de l'objet. à cela. Si je ne me trompe pas, vous voudrez peut-être consulter l'extension commerciale de Visual Studio que j'ai créée, appelée OzCode , qui vous permet de le faire beaucoup plus facilement grâce aux fonctions "Rechercher" et "Comparer". 

UPDATE 2 Pour répondre à la question de @ ppumkin, ou new EAP dispose d'une nouvelle fonctionnalité d'exportation qui permet aux utilisateurs d'exporter les valeurs des variables au format Json, XML, Excel ou C #.

Divulgation complète: Je suis le co-créateur de l'outil que j'ai décrit ici.

150
Omer Raviv

Vous pouvez exécuter le code ci-dessous dans la fenêtre immédiate et exporter dans un fichier xml la représentation XML sérialisée d'un objet:

(new System.Xml.Serialization.XmlSerializer(obj.GetType())).Serialize(new System.IO.StreamWriter(@"c:\temp\text.xml"), obj)

Source: Visual Studio comment sérialiser un objet à partir du débogueur

23
Bat_Programmer
23
Animesh

Ce n'est pas exactement ce que vous demandez, mais vous pouvez ajouter une surveillance pour cet objet et, dans la fenêtre de surveillance, développez et sélectionnez tout ce que vous souhaitez copier, puis copiez-le.

17
PMN

En utilisant attributs pour décorer vos classes et méthodes vous pouvez avoir une valeur spécifique de l'affichage de votre objet pendant le débogage avec l'attribut DebuggerDisplay p. Ex.

[DebuggerDisplay("Person - {Name} is {Age} years old")]
public class Person
{
  public string Name { get; set; }
  public int Age { get; set; }
}
4
Dave Anderson

Réponse la plus populaire de https://stackoverflow.com/a/23362097/268066 :

Avec un peu de chance, vous avez déjà Json.Net dans votre domaine d’application. Dans ce cas, ouvrez ceci dans votre fenêtre Immédiate:

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)
2
Efreeto

J'utilise toujours:

string myJsonString = JsonConvert.SerializeObject(<some object>);

Ensuite, je copie la valeur de chaîne qui, malheureusement, copie également les barres obliques inversées.

Pour supprimer les slashs, allez ici: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_replace

Ensuite, dans l’élément <p id="demo">Visit Microsoft!</p>, remplacez le texte par le texte que vous avez copié, puis remplacez la ligne var res = str.replace("Microsoft", "W3Schools"); par

var res = str.replace(/\\/g, '')

Exécutez ces nouvelles modifications, mais n'oubliez pas de cliquer sur le bouton "l'essayer" situé à droite.

Maintenant, vous devriez avoir tout le texte de l'objet au format JSON que vous pouvez déposer dans un formateur Json comme http://jsonformatter.org ou pour créer un POCO, vous pouvez maintenant utiliser http: // json2csharp. com/

1
Helzgate

Google m'a conduit à cette question vieille de 8 ans et j'ai fini par utiliser ObjectDumper pour obtenir quelque chose de très similaire au copier-coller des données du débogueur. C'était un jeu d'enfant.

Je connais la question posée spécifiquement sur les informations du debugger, mais ObjectDumper donne des informations qui sont fondamentalement les mêmes. Je suppose que ceux qui gèrent cette question sur Google sont comme moi et ont juste besoin des données à des fins de débogage et se moquent de savoir si elles proviennent du débogueur ou non.

1
Jesse Hufstetler

Je sais que je suis un peu en retard pour la fête, mais j’ai écrit une implémentation JSON pour la sérialisation d’un objet, si vous préférez une sortie JSON. Utilise la référence Newtonsoft.Json.

private static void WriteDebugJSON (dynamic obj, string filePath)
{
    using (StreamWriter d = new StreamWriter(filePath))
    {
        d.Write(JsonConvert.SerializeObject(obj));
    }
}
1
Marcus Parsons

si vous avez une liste et que vous voulez trouver une variable spécifique: Dans la fenêtre immédiate, tapez

 myList.Any(s => s.ID == 5062);

si cela retourne vrai

var myDebugVar = myList.FirstOrDefault(s => s.ID == 5062);
?myDebugVar
0
emert117

Je viens de cliquer avec le bouton droit sur la variable et de sélectionner AddWatch , la fenêtre de surveillance s’affiche, qui contient toutes les valeurs. J'ai tout sélectionné et collé dans un texte un éditeur de texte, c'est tout.

0
agileDev