Zugriff auf den .NET Framework-Quellcode beim Debuggen
Dieser Abschnitt beschäftigt sich mit einem Thema, dessen Ankündigung in der Presse schon für eine kleine Sensation sorgte. Die simple und dazu umgekehrt proportional Aufmerksamkeit erregende Meldung lautete: »Microsoft legt .NET-Quelltexte offen«. Das gelesen, stellten sich viele enthusiastische C#-Entwickler dann vor, »Oh wie cool – dann lade ich die Quelltexte herunter und bastele mir mein eigenes .NET Framework«. Doch ganz so einfach hat es uns Microsoft nicht gemacht, an die begehrten Quellen des Frameworks zu kommen.
Zunächst einmal benötigen Sie mindestens Visual Studio 2008 in der Standardversion. Ältere Visual Studio-Versionen und auch sämtliche Express-Versionen bleiben außen vor. Und dann können Sie die Quelltexte der jeweiligen Komponenten, die Sie interessieren, nur dann bekommen, wenn Sie innerhalb von Visual Studio in diese hinein debuggen – und zu nichts anderem sind die Quellcodes bzw. die Freigabe derselben auch gedacht: Nämlich um Sie beim Debuggen innerhalb Ihrer eigenen Projekte zu unterstützen.
Und für uns Visual Basic-Entwickler gibt es eventuell noch eine kleine Einschränkung, und ich möchte mich hier bewusst nicht weiter auf das Vorwort dieses Buches beziehen: Der verwaltete Teil des .NET Frameworks ist natürlich zu ganz erheblichen Teilen in C# geschrieben worden. Zu welchen genau entzieht sich meiner Kenntnis, aber müsste ich schätzen, dann würde ich sagen: 95% sind in C#, der Rest (beispielsweise die Microsoft.VisualBasic.dll-Assembly) in Visual Basic. Das wiederum bedeutet: Sie sehen den Quelltext natürlich auch nur in der Sprache, in der er entwickelt wurde, und das ist eben in den meisten Fällen C#.
Doch auch bevor das geschehen kann, müssen Sie – Stand 18.01.2008 – noch ein paar Vorbereitungen treffen, um in den Genuss des NET Framework-Debuggings zu gelangen. Wie es genau geht, zeigt die folgende Schritt-für-Schritt-Anleitung.
Zunächst benötigen Sie ein Projekt, das Sie debuggen möchten. In guter alter Fernsehköchemanier haben wir da mal was vorbereitet – und was könnte es anderes sein, als die 132-gazillionste Version von »Hello World«!
Das Projekt, mit dem wir das Debuggen des .NET Framework-Quellcodes demonstrieren wollen, befindet sich in .\Samples\Chapter02 - NeuInIde\FrameworkDebugging
 Abbildung 2.15 Diese spektakuläre Windows-Anwendung wird das Debuggen von .NET Framework-Code demonstrieren: Entdecken Sie, was wirklich passiert, wenn Sie die Schaltfläche drücken!
Und bevor wir uns daran machen können, herauszufinden, was wirklich passiert, wenn wir einem Label-Steuerelement eine neue Zeichenkette zuweisen …
'Mehr iss nich!
Public Class Form1
Private Sub btnShowHelloWorld_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnShowHelloWorld.Click
'Text der Schaltfläche setzen
lblHelloWorld.Text = "Hallo Welt!"
End Sub
End Class
- … müssen wir noch einige Einstellungen an der Benutzeroberfläche von Visual Studio vornehmen. Dazu wählen Sie in der IDE von Visual Studio aus dem Menü Extras den Menüpunkt Optionen aus.
- Im Dialog, der anschließend erscheint, wählen Sie in der linken Liste den Eintrag Debugging.

Abbildung 2.16 Deselektieren Sie die Option Nur eigenen Code aktivieren (nur verwaltet) und aktivieren Sie die Option
Quellserverunterstützung aktivieren
- Auf der rechten Seite des Dialogs werden nun die allgemeinen Debugging-Einstellungen angezeigt. Hier deselektieren Sie die Option Nur eigenen Code aktivieren (nur verwaltet) und aktivieren die Option Quellserverunterstützung aktivieren.
- Wechseln Sie in der linken Spalte desselben Dialogs auf den Debugging-Untereintrag Symbole. Dort klicken Sie auf die Neu-Schaltfläche (das Symbol, auf das die Maus in Abbildung 2.17 zeigt), und geben Sie den Microsoft-Symboldateienserver an: http://referencesource.microsoft.com/symbols.
- Unter dem Punkt Symbole vom Symbolserver in diesem Verzeichnis zwischenspeichern geben Sie anschließend einen Speicherort auf Ihrer Festplatte an, an dem die Quellcodedateien zwischengespeichert werden. Das Zwischenspeichern hat den Vorteil, dass die Dateien nur beim ersten Mal vom Microsoft-Server aus dem Internet geladen werden müssen – schon beim zweiten Quellcode-Debuggen fällt dieser Schritt weg, und die Quellcode-Dateien werden viel schneller aus diesem Cache-Speicher entnommen.
- Wenn Sie den Dialog nun mit OK bestätigen, sehen Sie einen EULA, den Sie ebenfalls nach natürlich aufmerksamem Studium mit OK bestätigen müssen – und dann dauert es ein kleines Weilchen, bis das Nächste passiert, da Visual Studio sofort anfängt, benötigte Symboldateien für das Beispielprojekt herunterzuladen. In der Statuszeile von Visual Studio können Sie beobachten, was passiert.

Abbildung 2.17 Im Symbole-Dialog geben Sie die Quelle der Symboldateien an, die auch den eigentlichen Quellcode
des .NET Frameworks enthalten sowie ein Verzeichnis, in dem die Quellcode-Dateien zwischengespeichert werden können
- Den anschließenden Sicherheitshinweis bestätigen Sie ebenfalls mit Ja (natürlich auch nicht, bevor Sie ihn aufmerksam gelesen haben!).
- Und damit haben Sie quasi die Voraussetzungen für das Debuggen gelegt. Um das Debuggen nun zu starten, setzten Sie mit (F9) einen Haltepunkt – am besten an der Stelle, an der im Programmcode die Textzuweisung von »Hallo Welt!« an das Label erfolgt:

Abbildung 2.18 Setzen Sie in der Zeile den Haltepunkt, die die Ausgangsbasis für den Sprung ins .NET Framework sein soll
- Starten Sie anschließend Debuggen mit (F5).
- Wenn das Programm gestartet ist, klicken Sie auf die Schaltfläche Zeig "Hallo Welt".
- Das Programm trifft auf die entsprechende Haltepunktzeile, und die Programmausführung wird an dieser Stelle unterbrochen.
- Wählen Sie jetzt aus dem Menü Debuggen, den Menüpunkt Fenster und weiter Aufrufliste. Alternativ drücken Sie (Strg)(Alt)(C).
- Sollten die Einträge für die Assembly System.Windows.Forms, anders als in der folgenden Abbildung zu sehen, ausgegraut sein, öffnen Sie das Kontext-Menü mit der rechten Maustaste und wählen den Menüpunkt Symbole laden.

Abbildung 2.19 Im Unterschied zu »sonst«, sollten die .NET Framework-Assembly-Methoden und Eigenschaften in der Aufrufliste nicht ausgegraut sein, als Zeichen dafür, dass Sie in sie hineindebuggen können. Falls doch: Symbole über das Kontextmenü laden!
- Wenn Sie anschließend mit (F11) in die Routine hineinsteppen, landen Sie tatsächlich im .NET Framework-Quell-Code, wie Abbildung 2.20 zeigt.

Abbildung 2.20 Voila! – Der Source-Code des .NET Frameworks, natürlich nur ein ganz, ganz kleiner Ausschnitt
(hier: Label.cs – der Sourcecode des Label-Controls)
|