Advanced Debugging F9 ist nicht genug Ingo Rammer

Slides:



Advertisements
Ähnliche Präsentationen
M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Advertisements

Anwendungen des OODM auf die ADB / NDB
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Microsoft Referenzarchitekturen- Infrastruktur für Connected Systems
Entwicklung und Einsatz von Smart Client-Anwendungen Jens Häupel Developer Evangelist Microsoft Deutschland GmbH Dirk Primbs.
Windows Vista für Entwickler
Neue Mobilität Frank Prengel Developer Evangelist Developer Platform & Strategy Group Microsoft Deutschland GmbH
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
Zusammenfassung des Kapitels 8
Verteilte Software - Java - Prozedurale Programmierung 1
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding.
Dipl. Inf. (FH) Paul Mizel Compilerbau.NET Compiler / Codegeneratoren / Skriptsprachen.
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Binäre Bäume Richard Göbel.
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
Objektorientierte Programmierung JDK-Klassenbibliothek
Brandenburgische Technische Universität Cottbus Program Profiling Andrzej Filipiak Übung Testen von Software SoSe 2006.
Reverse Engineering 1 Reverse Engineering WS 04 / 05 A. Zündorf.
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
04 - Actions Actions Actions 2 Motivation In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
WebCast: Managed Smart Tags mit VSTO Jens Häupel.NET Technologieberater Microsoft Deutschland GmbH
USE2ANT Die Umstellung von Use Makefiles zu Ant & Junit Von Isaac, Maleen und Marc.
M A X - P L A N C K - G E S E L L S C H A F T Bericht des Partnerinstituts Sabine Krott 1.0 Pilotentreffen im Harnack-Haus, 8. Juni 2006 Distribution:
Zeitplanung. Über uns Jens Schaller Blog: Tool:
Ingo Rammer Production Debugging Ingo Rammer
Microsoft Office Forms Server
VS one Veranstalter: VSone Feb. 08 Folie 1 Copyright by XML-Serialisierung zur Persistierung von Objekten Thomas Schissler
Google App Engine Microsoft Windows Azure
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Calendar Week 40 Gunnar Beutner. Bug Tracker Hi zusammen, bei der Vorbereitung auf das Meeting ist mir folgende aufgefallen bzw. unklar: - # Ich.
Die .NET Common Language Runtime
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
© All rights reserved. Zend Technologies, Inc. Jan Burkl System Engineer, Zend Technologies Zend Server im Cluster.
The free XML Editor for Windows COOKTOP Semistrukturierte Daten 1 Vortrag Semistrukturierte Daten 1 COOKTOP The free XML-Editor for Windows
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
IT Pro Day Entwicklung und Betrieb näher zusammen dank System Center 2012 und Team Foundation Server 2012 Hansjörg Scherer ALM Spezialist, Microsoft Schweiz.
| Basel Developing apps for SharePoint 2013 using Visual Studio 2013 René Modery, Office 365 MVP, 1stQuad Solutions.
Ingo Rammer thinktecture.
Roger Boesch Developer Technical Specialist Developer and Platform Group.
3/28/2017 8:11 PM Visual Studio Tools für Office { Rapid Application Development für Office } Jens Häupel Platform Strategy Manager Microsoft Deutschland.
MVVM in Windows 8 und Windows Phone 8
PresenterCompanyContact Windows Azure ASP.NET Web-Anwendungen schnell und zuverlässig bereitstellen.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Visual Extend Download, Installation, Registrierung deutschsprachige FoxPro User Group Uwe Habermann VFX 01 D.
Exception Handling in Java
XML IV: Cocoon 2.
Equals, Hashcode und CompareTo Micha Kessler
Univ.-Lektor Dipl.-Ing. Dr. Markus Schranz staatlich befugter und beeideter Ingenieurkonsulent für Informatik Web Application Engineering & Content Management.
Making people work together! Folie 1 NEXPLORE AG Stefan von Niederhäusern Einfache Anwendung der SuisseID durch das Software Development KIT
Umzug ASP.NET-WebForms-Elemente in MVC weiterverwenden
Office Business Anwendungen mit SharePoint 2010 Fabian Moritz SharePoint MVP.
Office Business Anwendungen mit SharePoint Fabian Moritz | MVP Office SharePoint Server.
© All rights reserved. Zend Technologies, Inc. Jenseits von var_dump(): Debugging in ZF Jan Burkl System Engineer.
2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.
Common Language Runtime Seminar Softwareentwicklung Wintersemester 2003 Gertraud Orthofer
CuP - Java Zwölfte Vorlesung Klassen – Komposition und Vererbung Freitag, 15. November 2002.
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Lind 02/2005 Einführung in JAVA. Lind 02/2005 Beispiel: Mittelwert Es soll ein Programm erstellt werden, das den Mittelwert zweier reeller Zahlen berechnet.
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Developer Day Entwicklung und Betrieb näher zusammen dank Team Foundation Server 2012 und System Center 2012 Hansjörg Scherer ALM Spezialist, Microsoft.
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
 Präsentation transkript:

Advanced Debugging F9 ist nicht genug Ingo Rammer

Ingo Rammer und Kleine Beratungsfirma für Softwareentwickler Unterstützung, Coaching und Beratung für Software-Architekten und -Entwickler –Architektur- und Code-Reviews –Prototypentwicklung und Architekturberatung –Coaching und Mentoring –Anwendungsoptimierung und Troubleshooting

Agenda Debugging von Applikationen mit Visual Studio –Erweiterte Breakpoints, Tracepoints,... –Makros –Debugger-Attribute –Visualizer für eigene Typen –Visualizer für fremde Typen Vorbereitung von Anwendungen für Debugging –Exception-Handling –MDbg –Eigene Debugger mit dem Objektmodell von MDbg –Lock-Bearbeitung –Automatische Erstellung von Memory-Dumps Heute Nachmittag: Production Debugging (was mach ich bloss mit dem Memory-Dump?) Dieser Vortrag steht zum Download bereit unter 3

Teil 1 F9 ist nicht genug Das kann Visual Studio Dieser Vortrag steht zum Download bereit unter 4

Erweiterte Breakpoints Breakpoints –Just My Code (Tools Options Debugging General) –CTRL+B, Breakpoint Groups Tracepoints Hitcount Conditions Makros Command Window –help –alias Dieser Vortrag steht zum Download bereit unter 5

Interaktive Tests Interaktive Klassenerstellung –Aufruf von statischen Methoden Object Workbench –Aufruf von Instanzmethoden Immediate Fenster Dieser Vortrag steht zum Download bereit unter 6

Just in Time Debugger –HKLM\Software\Microsoft\Windows NT\CurrenVersion\AeDebug Dieser Vortrag steht zum Download bereit unter 7

DebuggerDisplay Dieser Vortrag steht zum Download bereit unter 8 public class Invoice { [DebuggerDisplay("Items: {_items.Count} Sum: {Sum}")] private List _items = new List (); public double Sum { get { double sum = 0; foreach (InvoiceItem itm in _items) sum += (itm.Price * itm.Amount); return sum; } public class Invoice { [DebuggerDisplay("Items: {_items.Count} Sum: {Sum}")] private List _items = new List (); public double Sum { get { double sum = 0; foreach (InvoiceItem itm in _items) sum += (itm.Price * itm.Amount); return sum; } [DebuggerDisplay]-Attribut

DebuggerVisualizer [DebuggerVisualizer] Attribut Klassen müssen [Serializable] sein –Visualizer erhält serialisierten Klon –Rückmeldung per objectService.ReplaceObject() Dieser Vortrag steht zum Download bereit unter 9 [DebuggerVisualizer(typeof(MyVisualizer))] [Serializable] public class Invoice { //... } [DebuggerVisualizer(typeof(MyVisualizer))] [Serializable] public class Invoice { //... }

Debugger Visualizer Für Applikationsklassen (Visualizer in gleicher Assembly wie Anwendung) –Referenz auf Microsoft.VisualStudio.DebuggerVisualizers –Ableiten von DialogDebuggerVisualizer Dieser Vortrag steht zum Download bereit unter 10 protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) { MyClass dt = (MyClass) objectProvider.GetObject(); Form1 frm = new Form1(); //... show data... windowService.ShowDialog(frm); } 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 8\Common7\Packages\Debugger\Visualizers –My Documents\Visual Studio 2005\Visualizers Dieser Vortrag steht zum Download bereit unter 11 [assembly: System.Diagnostics.DebuggerVisualizer( typeof(InvoiceVisualizer), typeof(VisualizerObjectSource), Target = typeof(Invoice), Description = "Invoice Visualizer")] [assembly: System.Diagnostics.DebuggerVisualizer( typeof(InvoiceVisualizer), typeof(VisualizerObjectSource), Target = typeof(Invoice), Description = "Invoice Visualizer")]

Obskures: Debugger Proxy Stellvertreter-Klassen im Debugger Werden automatisch statt den ursprünglichen Klassen angezeigt Dieser Vortrag steht zum Download bereit unter 12 [assembly: DebuggerTypeProxy(typeof(InvoiceProxy), Target = typeof(Invoice))] public class InvoiceProxy: Invoice { private Invoice _val; public InvoiceProxy(Invoice val) { _val = val; }... [assembly: DebuggerTypeProxy(typeof(InvoiceProxy), Target = typeof(Invoice))] public class InvoiceProxy: Invoice { private Invoice _val; public InvoiceProxy(Invoice val) { _val = val; }...

Teil 2 Vorbereiten für´s Debuggen Dieser Vortrag steht zum Download bereit unter 13

Vorbereitungen? Wofür? –Zeitersparnis während Entwicklung –Unterstützung im Testbetrieb (Friendly Customers) –Fehlersuche im Echtbetrieb (Production Debugging) Grundsätzlich –Während der Entwicklungszeit bestimmen Sie die notwendige Zeit für späteres Debugging Dieser Vortrag steht zum Download bereit unter 14

Exceptions Primärer Einsprungpunkt für späteres Debuggen Drei 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 geworfen –Exceptions werden nur dort gefangen, wo die Applikation etwas mit der Exception machen kann Logging ist kein Grund für re-throws! (Callstack gibts auch später noch) Wo muss gecatcht werden? –Threadprozeduren, Finalizer, eventuell Events Dieser Vortrag steht zum Download bereit unter 15

MDbg Kleiner, feiner Debugger Zwei Versionen: –MDbg SDK (hier nicht relevant) –MDbg Sample (mit Sourcecode) Bietet komplettes Debugger Objektmodell Dieser Vortrag steht zum Download bereit unter 16

Beispiel: Locks Zu lange Locking-Dauer ist ein Problem für Skalierbarkeit von Applikationen Was kann man im Debugger machen? Dieser Vortrag steht zum Download bereit unter 17

MemoryDumps – Ultimative Fehlersuche Speicherabbilder sind die ultimative Unterstützung zur Fehlersuche Zeigen den Status einer Applikation zu einem bestimmten Zeitpunkt Zwei Ausprägungen –Minidump: praktisch nur Callstack, wenige KB gross –Minidump mit allen Optionen: komplettes Speicherabbild, kann einige 100 MB gross werden Dieser Vortrag steht zum Download bereit unter 18

Programmgesteuerte Dump-Erstellung DbgEng.DLL (aus Debugging Tools for Windows) Darf in Ihre Programme integriert werden Dieser Vortrag steht zum Download bereit unter 19 [DllImport("DbgHelp.dll", SetLastError = true)] private static extern bool MiniDumpWriteDump( IntPtr hProcess, int processId, IntPtr fileHandle, int dumpType, IntPtr excepInfo, IntPtr userInfo, IntPtr extInfo); [DllImport("DbgHelp.dll", SetLastError = true)] private static extern bool MiniDumpWriteDump( IntPtr hProcess, int processId, IntPtr fileHandle, int dumpType, IntPtr excepInfo, IntPtr userInfo, IntPtr extInfo); FileStream stream = Process proc = Process.GetProcessById(pid); int dumpType = (int)0x ; // all options // int dumpType = (int)0x ; // minidump MiniDumpWriteDump(proc.Handle, proc.Id, stream.Handle, dumpType, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); FileStream stream = Process proc = Process.GetProcessById(pid); int dumpType = (int)0x ; // all options // int dumpType = (int)0x ; // minidump MiniDumpWriteDump(proc.Handle, proc.Id, stream.Handle, dumpType, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

Summary Debugging von Applikationen mit Visual Studio –Erweiterte Breakpoints, Tracepoints, Makros –[DebuggerDisplay], [DebuggerVisualizer], [DebuggerProxy] Vorbereitung von Anwendungen –Exception-Handling –MDbg –Eigene Debugger mit dem Objektmodell von MDbg Beispiel: Lock-Bearbeitung –Automatische Erstellung von Memory-Dumps Heute Nachmittag: Production Debugging (was mach ich bloss mit dem Memory-Dump?) Dieser Vortrag steht zum Download bereit unter 20

In-depth support and consulting for software architects and developers {}