Visual Studio Debugger – erweiterte Möglichkeiten
Der Debugger im Studio ermöglicht uns erheblich mehr als bei vielen Kollegen bekannt ist. Über die Verwendung von sogenannten “Attributen” kann man im Quellcode das verhalten des Debuggers steuern. Nähere Informationen dazu gibt’s in zahlreichen Foren.
Hier aber mal ganz kurz ein Paar Anregungen:
Attribute


Außerdem kann man die Diagnosefunktionen vom Studio noch erheblich erweitern. Dies hilft z.B. bei der Suche nach Problemen mit der Datenbindung insbesondere innerhalb von WPF-Masken erheblich. So geht’s:
Im config-file der Anwendung fügt man folgende Zeilen ein, um sogenannte Listeners zu definieren:
<system.diagnostics>
<sources>
<source name=”System.Windows.Data” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
<source name=”System.Windows.DependencyProperty” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
<source name=”System.Windows.Freezable” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
<source name=”System.Windows.RoutedEvent” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
<!–
<source name=”System.Windows.Media.Animation” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
–>
<source name=”System.Windows.NameScope” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
<source name=”System.Windows.ResourceDictionary” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
<source name=”System.Windows.Markup” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
<!–
<source name=”System.Windows.Documents” switchName=”SourceSwitch” >
<listeners>
<add name=”textListener” />
</listeners>
</source>
–>
</sources>
<switches>
<add name=”SourceSwitch” value=”All” />
<!–add name=”SourceSwitch” value=”Off” –>
<!–add name=”SourceSwitch” value=”Verbose” –>
<!–add name=”SourceSwitch” value=”Warning” –>
<!–add name=”SourceSwitch” value=”Activity” –>
</switches>
<sharedListeners>
<!– This listener sends output to the console –>
<add name=”console”
type=”System.Diagnostics.ConsoleTraceListener”
initializeData=”false”/>
<!– This listener sends output to an Xml file named AvTrace.xml –>
<add name=”xmlListener”
type=”System.Diagnostics.XmlWriterTraceListener”
traceOutputOptions=”None”
initializeData=”AvTrace.xml” />
<!– This listener sends output to a file named AvTrace.txt –>
<add name=”textListener”
type=”System.Diagnostics.TextWriterTraceListener”
initializeData=”AvTrace.txt” />
</sharedListeners>
<trace autoflush=”true” indentsize=”4″></trace>
</system.diagnostics>
Über den Block <switches> kann man sehr genau entscheiden in welchen Bereichen die Listeners aktiviert werden sollen. Im Quellcode kann man dann die erweiterten Diagnosen über folgenden Code aktivieren:
// tracing fürs binding aktivieren
PresentationTraceSources.Refresh();
PresentationTraceSources.RoutedEventSource.Listeners.Add(new DefaultTraceListener());
PresentationTraceSources.RoutedEventSource.Switch.Level = SourceLevels.All;
WICHTIG: Ausgabe erfolgt im Verzeichnis der EXE in dem Textfile <AvTrace.txt> - kann man im Config File natürlich ändern!