Ingo Rammer [email protected] thinktecture.
-
Upload
eilert-streng -
Category
Documents
-
view
123 -
download
2
Transcript of Ingo Rammer [email protected] thinktecture.
Advanced Debugging in Visual Studio
Ingo [email protected]
Ingo Rammer und
Kleine Beratungsfirma für Softwareentwickler
Unterstützung, Coaching und Beratung für Software-Architekten und -Entwickler
Architektur- und Code-ReviewsPrototypentwicklung und ArchitekturberatungCoaching und MentoringAnwendungsoptimierung und Troubleshooting
http://[email protected]
Erweiterte Breakpoints
Breakpoints„Just My Code“ (ToolsOptionsDebuggingGeneral)CTRL+B, Breakpoint Groups
TracepointsHitcountConditionsMakrosCommand Window
helpalias
Variablenfenster
Ausdrücke in Variablenfenstern (Watch, Locals, Autos)DebuggerDisplayDebuggerProxyDebuggerVisualizer
Interaktive Tests
Interaktive KlassenerstellungAufruf von statischen Methoden
Object WorkbenchAufruf von Instanzmethoden
Immediate Fenster
Neues in Visual Studio 2008
Debugging in den .NET Framework Quellcode
http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspxOder: Suche nach „debugging .net source code 2008“Grund warum ich es nicht zeige: benötigt Internet-Verbindung, Quellcode ist nicht gecached
Multithreaded Debugging
DebuggerDisplay
public class Invoice{ [DebuggerDisplay("Items: {_items.Count} Sum: {Sum}")] private List<InvoiceItem> _items = new List<InvoiceItem>();
public double Sum { get { double sum = 0; foreach (InvoiceItem itm in _items) sum += (itm.Price * itm.Amount); return sum; } }}
• [DebuggerDisplay]-Attribut
DebuggerVisualizer
[DebuggerVisualizer] AttributKlassen müssen [Serializable] sein
Visualizer erhält serialisierten KlonRückmeldung per objectService.ReplaceObject()
[DebuggerVisualizer(typeof(MyVisualizer))][Serializable]public class Invoice{ //...}
Debugger Visualizer
Für Applikationsklassen (Visualizer in gleicher Assembly wie Anwendung)
Referenz auf Microsoft.VisualStudio.DebuggerVisualizersAbleiten von DialogDebuggerVisualizer
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider){ MyClass dt = (MyClass) objectProvider.GetObject();
Form1 frm = new Form1(); // ... show data ... windowService.ShowDialog(frm);}
Debugger Visualizer
Möglichkeit 2: Getrennte Visualizer in Klassenbibliothek
Visualizer kann global oder per User installiert werden:
Program Files\Microsoft Visual Studio 9\ Common7\Packages\Debugger\VisualizersMy Documents\Visual Studio 2008\Visualizers
[assembly: System.Diagnostics.DebuggerVisualizer(typeof(InvoiceVisualizer),typeof(VisualizerObjectSource),Target = typeof(Invoice),Description = "Invoice Visualizer")]
Obskures: Debugger Proxy
Stellvertreter-Klassen im DebuggerWerden automatisch statt den ursprünglichen Klassen angezeigt[assembly: DebuggerTypeProxy(typeof(InvoiceProxy), Target = typeof(Invoice))]
public class InvoiceProxy: Invoice{ private Invoice _val;
public InvoiceProxy(Invoice val) {
_val = val; } ...
Teil 2Vorbereiten für´s Debuggen
Vorbereitungen?
Wofür?Zeitersparnis während EntwicklungUnterstützung im Testbetrieb („Friendly Customers“)Fehlersuche im Echtbetrieb („Production Debugging“)
GrundsätzlichWährend der Entwicklungszeit bestimmen Sie die notwendige Zeit für späteres Debugging
Exceptions
Primärer Einsprungpunkt für späteres DebuggenDrei Grundregeln
Auslösen von nicht-essentiellen Exceptions vermeiden (TryParse, File.Exists)Was ist essentiell? Wenn die Methode nicht das macht (oder: machen kann), was der Name nahelegt, dann wird eine Exception geworfenExceptions werden nur dort gefangen, wo die Applikation etwas mit der Exception machen kann
Logging ist kein Grund für re-throws! (Callstack gibt‘s auch später noch)Wo muss gecatcht werden?
Threadprozeduren, Finalizer, eventuell Events
MDbg
Kleiner, feiner DebuggerZwei Versionen:
MDbg SDK (hier nicht relevant)MDbg Sample (mit Sourcecode)
Bietet komplettes Debugger Objektmodell
Beispiel: Locks
Zu lange Locking-Dauer ist ein Problem für Skalierbarkeit von ApplikationenWas kann man im Debugger machen?
Summary
Debugging von Applikationen mit Visual StudioErweiterte Breakpoints, Tracepoints, Makros[DebuggerDisplay], [DebuggerVisualizer], [DebuggerProxy]Neues in Visual Studio 2008
Vorbereitung von AnwendungenException-HandlingMDbgEigene Debugger mit dem Objektmodell von MDbg
Beispiel: Lock-Bearbeitung
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after
the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.