Ich habe jahrelang mit dem Debugger von VS gearbeitet, aber hin und wieder stoße ich auf eine Funktion, die ich noch nie bemerkt habe, und denke: "Verdammt! Wie hätte ich das übersehen können? Es ist so nützlich!"
[Haftungsausschluss: Diese Tipps funktionieren in VS 2005 in einem C # -Projekt, keine Garantie für ältere Inkarnationen von VS oder anderen Sprachen]
Verfolgen Sie Objektinstanzen
Arbeiten mit mehreren Instanzen einer bestimmten Klasse? Wie kannst du sie auseinanderhalten? In den Programmiertagen vor der Speicherbereinigung war es einfach, Referenzen zu verfolgen - sehen Sie sich nur die Speicheradresse an. Mit .NET können Sie das nicht tun - Objekte können verschoben werden. Glücklicherweise können Sie in der Uhrenansicht mit der rechten Maustaste auf eine Uhr klicken und "Objekt-ID erstellen" auswählen.
Uhrenansicht http://img403.imageshack.us/img403/461/52518188cq3.jpg
Dadurch wird nach dem Wert der Instanz ein {1 #}, {2 #} usw. angehängt, wodurch der Instanz effektiv eine eindeutige Bezeichnung zugewiesen wird. Es sieht aus wie das:
nummerierte Instanz http://img383.imageshack.us/img383/7351/11732685bl8.jpg
Die Beschriftung bleibt für die Lebensdauer dieses Objekts erhalten.
Aussagekräftige Werte für beobachtete Variablen
Standardmäßig ist der Wert einer überwachten Variablen der Typ. Wenn Sie seine Felder sehen möchten, müssen Sie es erweitern, und dies kann lange dauern (oder sogar eine Zeitüberschreitung!), Wenn es viele Felder gibt oder sie etwas Kompliziertes tun.
Einige vordefinierte Typen zeigen jedoch aussagekräftigere Informationen:
- Zeichenfolgen zeigen ihren tatsächlichen Inhalt
- Listen und Wörterbücher zeigen die Anzahl ihrer Elemente usw.
aussagekräftige Informationen http://img205.imageshack.us/img205/4808/37220487md1.jpg
Wäre es nicht schön, das für meine eigenen Typen zu haben?
Hmm ...
... einige Zeit mit .NET Reflector zeigt, wie einfach dies mit dem DebuggerDisplay
Attribut meines benutzerdefinierten Typs erreicht werden kann:
[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
public string Name { get { ... } }
...
}
... erneut ausführen und ...
ta da! http://img60.imageshack.us/img60/926/79816018ha1.jpg
Hier gibt es viel mehr Infos zu diesem Thema: MSDN
Unterbrechen Sie alle Ausnahmen
... auch diejenigen, die im Code behandelt werden! Ich weiß, ich bin so ein N00B, weil ich seit meiner Geburt nichts davon weiß, aber hier geht es trotzdem - vielleicht hilft das irgendwann jemandem:
Sie können einen debuggten Prozess zwingen, jedes Mal, wenn eine Ausnahme ausgelöst wird, in den Debug-Modus zu wechseln. Haben Sie schon einmal stundenlang auf Fehlersuche gegangen, um auf einen solchen Code zu stoßen?
try {
runStrangeContraption();
} catch(Exception ex) {
/* TODO: Will handle this error later */
}
In diesen Fällen ist es sehr praktisch, alle Ausnahmen zu erfassen. Dies kann über Debug> Ausnahmen ... (Strg-Alt-E) aktiviert werden . Aktivieren Sie die Kontrollkästchen in der Spalte "Ausgelöst" für jede Art von Ausnahme, die Sie benötigen.
Das waren ein paar Momente, in denen ich mir die Stirn schlug. Möchten Sie Ihre teilen?