wake-up-neo.net

Kopieren Sie Objektwerte im Debugmodus von Visual Studio

Im Debug-Modus von Visual Studio ist es möglich, den Mauszeiger über die Werte zu bewegen und dann mit der rechten Maustaste auf "Kopieren", "Ausdruck kopieren" oder "Wert kopieren" zu klicken.

Falls die Variable ein Objekt und nicht nur ein Basistyp ist, gibt es ein Pluszeichen, um das Objekt zu erweitern und zu erkunden. Gibt es eine Möglichkeit, das alles in die Zwischenablage zu kopieren?

99
Farinha

Geben Sie im nächsten Fenster ein

?name_of_variable

Dadurch wird alles ausgedruckt, und Sie können diesen Punkt an beliebiger Stelle manuell kopieren oder die Protokollierungsfunktionen des aktuellen Fensters verwenden, um ihn automatisch in eine Datei zu schreiben.

UPDATE: Ich nehme an, Sie haben gefragt, wie Sie die verschachtelte Struktur der Werte kopieren/einfügen können, um sie entweder textuell zu durchsuchen oder um sie nebenbei zu speichern und später den Status des Objekts zu vergleichen dazu Wenn ich Recht habe, sollten Sie sich die kommerzielle Erweiterung von Visual Studio, die ich erstellt habe, namens OzCode anschauen. Dadurch können Sie diese Dinge durch die Funktionen "Suchen" und "Vergleichen" viel einfacher ausführen. 

UPDATE 2 Zur Beantwortung der Frage von @ ppumkin oder new EAP verfügt eine neue Exportfunktion, mit der Benutzer die Variablenwerte in Json-, XML-, Excel- oder C # -Code exportieren können.

Vollständige Offenlegung: Ich bin der Co-Creator des hier beschriebenen Tools.

150
Omer Raviv

Sie können den Code in unmittelbarem Fenster ausführen und die serialisierte XML-Darstellung eines Objekts in eine XML-Datei exportieren:

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

Quelle: Visual Studio zum Serialisieren eines Objekts aus dem Debugger

23
Bat_Programmer
23
Animesh

Nicht genau das, wonach Sie fragen, Sie können jedoch eine Uhr für dieses Objekt hinzufügen. Erweitern und wählen Sie im Überwachungsfenster alles aus, was Sie kopieren möchten, und kopieren Sie es.

17
PMN

Durch die Verwendung von Attributen zum Dekorieren Ihrer Klassen und Methoden können Sie während des Debugging einen bestimmten Wert aus Ihrer Objektanzeige mit dem DebuggerDisplay-Attribut erhalten z.

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

Beliebteste Antwort von https://stackoverflow.com/a/23362097/268066 :

Mit etwas Glück haben Sie Json.Net bereits in Ihrer Appdomain. In diesem Fall fügen Sie dies in Ihr Direktfenster ein:

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

Ich verwende immer:

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

Dann kopiere ich den String-Wert, der leider auch die hinteren Schrägstriche kopiert.

Um die Backlashes zu entfernen, gehen Sie hier: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_replace

Ersetzen Sie dann im Element <p id="demo">Visit Microsoft!</p> den Text durch den kopierten Text . Und ersetzen Sie dann die Zeile var res = str.replace("Microsoft", "W3Schools"); durch

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

Führen Sie diese neuen Änderungen aus, aber vergessen Sie nicht, auf die Schaltfläche "try it" rechts zu klicken.

Jetzt sollten Sie den gesamten Text des Objekts im Json-Format haben, den Sie in einem Json-Formatierer wie http://jsonformatter.org ablegen können, oder zum Erstellen eines POCO können Sie jetzt http: // json2csharp verwenden. com/

1
Helzgate

Google führte mich zu dieser 8-jährigen Frage und letztendlich benutzte ich ObjectDumper , um etwas zu erreichen, das dem Kopieren von Debugger-Daten sehr ähnlich ist. Es war eine Brise.

Ich kenne die Frage, die speziell nach Informationen aus dem debugger gefragt wurde, aber ObjectDumper gibt Informationen an, die im Wesentlichen gleich sind. Ich gehe davon aus, dass diejenigen, die diese Frage googeln, wie ich sind und nur die Daten für Debugging-Zwecke benötigen und sich nicht darum kümmern, ob sie technisch vom Debugger stammen oder nicht.

1

Ich weiß, ich bin etwas spät dran, aber ich habe eine JSON-Implementierung für die Serialisierung eines Objekts geschrieben, wenn Sie die JSON-Ausgabe bevorzugen. Verwendet die Referenz Newtonsoft.Json.

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

wenn Sie eine Liste haben und eine bestimmte Variable suchen möchten: Geben Sie im unmittelbaren Fenster Folgendes ein

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

wenn dies wahr zurückgibt

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

Ich habe gerade mit der rechten Maustaste auf die Variable geklickt und AddWatch ausgewählt, das ist ein Überwachungsfenster, das aus allen Werten besteht. Ich habe alles ausgewählt und es in einen Texteditor eingefügt, das ist alles.

0
agileDev