Ich versuche, einen Fehler in einem Absturzspeicherauszug zu untersuchen (daher kann ich den Code nicht ändern). Ich habe ein wirklich kompliziertes Objekt (Tausende von Zeilen in der serialisierten Darstellung) und sein Zustand ist inkonsistent. Um den Status zu untersuchen, ist die Visual Studio-Debugger-Ansicht unbrauchbar. Das Objekt hat jedoch einen Datenvertrag. Ich möchte es serialisieren und dann mit meinem bevorzugten Texteditor über das Objekt navigieren. Ist es möglich, das vom Debugger aus zu tun?
86
Antworten:
Vor einiger Zeit habe ich diesen Einzeiler geschrieben, der ein Objekt in eine Datei auf der Festplatte serialisiert. Kopieren Sie es in Ihr Direktfenster und ersetzen Sie
obj
es durch Ihr Objekt (es wird zweimal referenziert). Es wird einetext.xml
Datei gespeichertc:\temp
, um sie nach Ihren Wünschen zu ändern.Erwarten Sie jedoch keine Magie. Wenn das Objekt nicht serialisiert werden kann, wird eine Ausnahme ausgelöst.
quelle
identifier "System" is undefined
Mit etwas Glück haben Sie Json.Net bereits in Ihrer Appdomain. In diesem Fall fügen Sie dies in Ihr Sofortfenster ein:
Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)
quelle
Hier ist eine Visual Studio-Erweiterung, mit der Sie genau das tun können:
https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f
Sie können in JSON, XML oder C # ausgeben
quelle
Verwenden Sie diese Option im Fenster "Sofort" von Visual Studio und ersetzen Sie sie
c:\directory\file.json
durch den vollständigen Pfad zu der Datei, in die Sie den JSON schreiben möchten, undmyObject
durch Ihre zu serialisierende Variable:quelle
Ich habe eine Erweiterungsmethode, die ich verwende:
Ich überlade es mit einer Zeichenfolge für saveTo und rufe es aus dem unmittelbaren Fenster auf:
quelle
Möglicherweise können Sie das unmittelbare Fenster verwenden, um es zu serialisieren und den Inhalt dann in Ihren bevorzugten Editor zu kopieren.
Eine andere Möglichkeit besteht darin, die
ToString()
Methode zu überschreiben und im Debug-Modus aufzurufen.Sie können den Inhalt auch kurz vor dem Absturz in eine Datei schreiben oder den Code in einen Versuch / Fang einwickeln und die Datei dann schreiben. Ich gehe davon aus, dass Sie erkennen können, wann es abstürzt.
quelle
Eine Variation der Antwort von Omar Elabd -
Es ist nicht kostenlos, aber es gibt eine kostenlose Testversion für OzCode
( https://marketplace.visualstudio.com/items?itemName=CodeValueLtd.OzCode ).
Es gibt einen integrierten Export nach JSON im Kontext- / Hover-Menü, und es funktioniert etwas besser als die Objektexporterweiterung (der Kompromiss, dass es nicht kostenlos ist).
http://o.oz-code.com/features#export (Demo)
Ich weiß, dass dies einige Jahre später ist, aber ich hinterlasse hier eine Antwort, weil dies für mich funktioniert hat und jemand anderes es möglicherweise nützlich findet.
quelle
Wenn Sie einen Zirkelverweis haben, führen Sie diesen im unmittelbaren Fenster aus:
quelle
Ich habe ObjectDumper.Net verwendet .
Es funktioniert gut, besonders wenn Sie Live-Unit-Tests haben. Ich kann den Wert einer Variablen einfach in der Konsole anzeigen, wenn ein Test ausgeführt wird, sodass ich nicht manuell debuggen muss.
Dies kann hilfreich sein, wenn Sie XUnit verwenden.
quelle
Eine Variation von Alexeys Antwort. Etwas komplizierter, aber ohne Schreiben in eine Textdatei:
1) Geben Sie im Direktfenster Folgendes ein:
2) Geben Sie im Überwachungsfenster zwei Uhren ein:
Nachdem Sie die zweite Watch (die Serialize) eingegeben haben, wird der StringWriter-Watch-Wert auf obj serialisiert in XML gesetzt. Kopieren Sie es und fügen Sie es ein. Beachten Sie, dass das XML in geschweiften Klammern {...} eingeschlossen wird. Sie müssen sie daher entfernen, wenn Sie das XML für irgendetwas verwenden möchten.
quelle