News

Update der .NET Build Projekt Vorlagen für Visual Studio 2008

16.05. 2008

Die Projektvorlagen für die .NET Buildumgebung wurden für Visual Studio 2008 ergänzt. Ausserdem wurde ein Checkout Problem in der Vorlage für Visual Studio 2005 mit SourceSafe behoben.

Weiterlesen …

Neuer Artikel über das Debuggen des .NET Frameworks

04.05. 2008

Ein neuer Artikel über das Debuggen der .NET Framework Basisklassen ist verfügbar.

Weiterlesen …

Newsfeed

Die News sind auch als RSS Feed verfügbar und können mit einem entsprechenden Programm abonniert werden. Wie geht das? Lesen sie mehr dazu auf Wikipedia.

Wissen > .NET Framework debuggen

.NET Framework debuggen

Im Oktober 2007 hatte Microsoft mit der Ankündigung (im Blog von Scott Guthrie) für Aufregung gesorgt, der Öffentlichkeit Einsicht in Teile des .NET Frameworks zu geben. Inzwischen ist der Sourcecode unter einer "Read-only Reference License" verfügbar, und auch die Entwickler Community hat bereits mit Tools darauf reagiert.

Dieser Artikel zeigt, wie man Visual Studio 2008 und 2005 ab der Standard Edition einrichtet, um Zugriff auf den Quellcode zu erhalten, und wie man komfortabel den ganzen verfügbaren Quellcode lokal kopieren kann, um auch offline arbeiten zu können.

Konfiguration von Visual Studio

Sie benötigen mindestens Visual Studio 2005 oder 2008 ab der Standard Edition, die Express Versionen werden nicht unterstützt.
Bevor mit der Konfiguration begonnen werden kann, sollte der Visual Studio Hotfix KB944899 installiert werden, er behebt einen Fehler im Debugger von Visual Studio 2008.

Microsoft stellt für die folgenden Assemblies Debug Symbole zur Verfügung:
  • mscorlib.dll
  • System.dll
  • System.Data.dll
  • System.Drawing.dll
  • System.Web.dll
  • System.Web.Extensions.dll
  • System.Windows.Forms.dll
  • System.Xml.dll
  • alle WPF DLLs (System.Windows.dll, System.Printing.dll, System.Speech.DLL, UIAutomation.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.DLL)
  • Microsoft.VisualBasic.DLL
Das bedeutet, dass sie Einblick in den Source Code der Basisklassen (BCL) wie System. String oder System.Threading.Thread und dergleichen erhalten, aber auch ADO.NET, XML und WinForms Typen zur Verfügung stehen.

Starten sie Visual Studio und wählen sie in den Optionen (Tools/Options) den Punkt Debugging aus. In der Liste dieser Optionen deaktivieren sie Enable Just My Code (Managed Only) und aktivieren Enable source server support und Print source server diagnostic messages to the Output window wie in der untenstehenden Abbildung gezeigt:

Visual Studio Debugging Optionen

Nun wechseln sie zum Punkt Symbols und fügen den Microsoft Sourcecode Server hinzu. Wählen sie einen lokalen Ordner aus, in dem die PDB Dateien und die Sourcecode Files gespeichert werden. Hier wird das Verzeichnis c:\NET Reference Source Symbols verwendet.
Aktivieren sie die Option Search the above locations only when symbols are loaded manually. Ohne dieses Häkchen würden die Symbole sonst für jeden Einzelschritt im Debugger, für welchen Microsoft Code verfügbar ist, geladen. Dies kann das Debuggen dann ziemlich verzögern.

Visual Studio Debugging Optionen


Öffnen sie nun ein beliebiges Projekt und setzen sie einen Haltepunkt (Breakpoint). Wenn der Debugger an dieser Stelle angekommen ist, wechseln sie ins Fenster Call Stack. Dieses können sie über Debug/Windows/Call Stack öffnen, falls es noch nicht angezeigt wird.
Sie sehen darin nun die Stack Liste der Aufrufe, die bis zum aktuellen Haltepunkt geführt haben.

Visual Studio Call Stack Fenster

Für die Einträge, welche in hellgrau dargestellt werden, sind keine Debug Symbole verfügbar. dies wollen wir nun ändern. Markieren sie eine Zeile, welche mit mscorlib.dll beginnt, und wählen sie im Kontextmenü den Punkt Load Symbols aus. Wenn sie dies das erste Mal machen, müssen sie eine Lizenzvereinbarung bestätigen, welche ihnen angezeigt wird. Die vorherigen grauen Einträge sind nun normal dargestellt, was bedeutet, dass die Symbole geladen sind.

Visual Studio Call Stack

Wenn sie nun eine Einzelschritte vornehmen (F11) gelangen sie direkt in den Sourcecode von Microsoft.
Der grosse Nachteil dieses Vorgehens ist, dass sie den BCL Sourcecode nur dann zu sehen bekommen, wenn sie den jeweiligen Namespace untersuchen. Dies bedeutet auch jedesmal einen Zugriff auf den Symbolserver via Internet. Ideal wäre es, wenn der gesamte Quellcode lokal abgelegt werden könnte. So kann auch offline mit dem Microsoft Code gearbeitet werden, und das Debuggen erfolgt mit weniger Verzögerungen.
Dafür gibt es das Kommandozeilen Tool NetMassDownloader, welches auf CodePlex zur Verfügung steht.

Download aller Symbole mit NetMassDownloader

Das Tool erlaubt es, die Symbole und den Sourcecode für ein Assembly oder alle Assemblies einem Verzeichnis vom Microsoft Server lokal zu speichern.
Wenn sie allen momentan verfügbaren Sourcecode (ca. 7'000 Dateien, 200MB) auf einmal kopieren wollen, dauert das abhängig auch von ihrer Internetverbindung etwa eine Stunde.

Das Tool erlaubt über den Schalter -output die Angabe eines lokalen Verzeichnisses. Dieses sollten sie angeben, ansonsten landet der Sourcecode im Cache Verzeichnis von Visual Studio 2008.
Ein weiterer wichtiger Vorteil eines selber definierten Verzeichnisses ist, dass sie die Symbole und den Quellcode leichter auf andere Geräte kopieren und so dort gar nie auf die Microsoft Server zugreifen müssen.

Laden sie sich das Tool herunter und öffnen sie eine Kommandozeile. Die .NET 2.0 Assemblies befinden sich standardmässig alle im Verzeichnis c:\Windows\Microsoft.NET\Framework\v2.0.50727. Die .NET Framework 3.0 und 3.5 sind unter c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
und c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5 abgelegt.

Um alle Symbole und Quelldateien mit einem Befehl von den Microsoft Servern in ihr lokales Verzeichnis "c:\NET Reference Source Symbols" zu kopieren, wechseln sie ins Verzeichnis, in dem sie den NetMassDownloader abgelegt haben, und geben sie folgenden Befehl ein (eine Zeile):

netmassdownloader -output "C:\NET Reference Source Symbols" -v
-d "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5"
-d "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0"
-d C:\Windows\Microsoft.NET\Framework\v2.0.50727


Nachdem das Tool seine Arbeit beendet hat, befinden sich nun die Symbole (PDB) und der Sourcecode im angegebenen Verzeichnis. So können sie nun zum Beispiel auch Visual Studio 2005 konfigurieren, dass es direkt auf den bereits kopierten Sourcecode zugreift:

Visual Studio 2005 Debug Konfiguration


Wenn sie über einen Proxy Server auf das Internet zugreifen, bei dem sie sich authentisieren müssen, können sie den -proxy Schalter von NetMassDownloader verwenden. Der Syntax ist wie folgt:

http://MeinProxyServer:80|username|password|[domainname]


Für eine etwas dauerhaftere Einstellung können sie im selben Verzeichnis eine Konfigurationsdatei NetMassDownloader.exe.config mit folgendem Inhalt anlegen:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.net>
        <defaultProxy useDefaultCredentials="true" />
    </system.net>
</configuration>

Ein paar Worte zum Schluss...

In einem der empfehlenswertesten Bücher für Entwickler, Der Pragmatische Programmierer, steht unter anderem folgender Tipp:

"select" Isn't Broken.

It is rare to find a bug in the OS or the compiler, or even a third-party product or library. The bug is most likely in the application.


Obschon der Einblick in die Microsoft Sourcen verlockend ist, sollte man bei Problemen nicht zuerst an einen Fehler im .NET Framework denken.