Wie aktivieren Sie ".NET Framework-Quellschritt aktivieren"?

118

Update 22. Februar 2013 : Der Microsoft Connect-Eintrag enthält einen Hinweis von Alok Shriram (Programmmanager, Basisklassenbibliotheken, .NET Framework), dass das Problem jetzt behoben werden sollte. Der Connect-Eintrag wird als Gelöst (Behoben) markiert :

Dieses Problem sollte jetzt behoben sein. Wir haben ein Update für Referenzquellen veröffentlicht. Bitte lassen Sie uns wissen, falls Ihr Problem immer noch nicht behoben ist.

Ein Jahr und ein Halbes.

Bonus Links

Ursprüngliche Frage

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Hinweis : Diese Frage ist ein Teil eines größeren Ganzen:


Visual Studio 2010 verfügt über eine neue Funktion:

  • Tools, Optionen, Debugging, Allgemein, .NET Framework-Quellschritt aktivieren

Screenshot des Optionsmenüs

Befolgen Sie die Anweisungen auf der MSDN-Seite. Gewusst wie: Debuggen von .NET Framework-Quelle :

So aktivieren Sie das Debuggen von .NET Framework-Quellen

  1. Auf der Werkzeuge Klicken Sie im Menü Optionen .

  2. In den Optionen Dialogfeld klicken Sie auf die Debuggen Kategorie.

  3. Aktivieren Sie im Feld Allgemein die folgenden Kontrollkästchen:

    • Aktivieren Sie .NET Framework-Quellschritt
    • Aktivieren Sie die Quellserverunterstützung

Ich mache das:

Screenshot des Optionsmenüs mit Hervorhebung der ausgewählten ausgewählten Optionen

Hinweis : Wie auf der MSDN-Seite vermerkt, und wie ich bemerkt habe, wird beim Aktivieren der Option " .NET Framework-Quellschritt aktivieren" automatisch deaktiviert. ** Nur meinen Code aktivieren (nur verwaltet). Ich habe auch die Diagnosemeldungen des Quellserver-Supports aktiviert.

Durch Aktivieren dieser Optionen wird für mich automatisch ein Download-Speicherort für den Symbol-Cache festgelegt:

Screenshot des Optionsmenüs mit Cache-Verzeichnis (hervorgehoben)

Hinweis : Der Microsoft Symbol Server- Eintrag ist bereits vorhanden (und kann nicht entfernt werden).


Auf der MSDN-Seite wird angegeben, dass die Symbole geladen werden sollen:

So laden Sie Framework-Symbole über das Fenster "Module"

  1. Klicken Sie im Fenster Module mit der rechten Maustaste auf ein Modul, für das keine Symbole geladen sind. Sie können sagen , ob Symbole geladen werden oder nicht an der Suche Symbole Status - Spalte.

  2. Zeigen Sie auf Laden Symbole aus und klicken Sie auf Microsoft Symbol Server , um Download - Symbole aus dem öffentlichen Microsoft - Symbolen Server oder Symbol Pfad zur Last von einem Verzeichnis , in dem zuvor gespeicherten Symbole.

Ich versuche das:

Geben Sie hier die Bildbeschreibung ein

und dann werden alle Symbole geladen:

Screenshot des Modulfensters, wie oben beschrieben

Ich habe auf einem Haltepunkt gesessen, der im Begriff ist, .NET Framework-Code aufzurufen:

Screenshot des Codes, unten transkribiert

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

Durch Drücken von F11springt der Debugger einfach zur nächsten Zeile:

Screenshot des Codes, unten transkribiert

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

    //Record the running scale factor used
    this.scaleFactor = new SizeF(
            this.scaleFactor.Width * factor.Width,
            this.scaleFactor.Height * factor.Height);

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Ich sitze an einem Haltepunkt in meinem Code. Ich versuche, auf eine Funktion weiter oben im Aufrufstapel zu doppelklicken. Dies würde es mir hoffentlich ermöglichen, zum .NET-Code zu springen :

Geben Sie hier die Bildbeschreibung ein

Außer dass es nicht funktioniert: Visual Studio sagt mir, dass keine Quelle verfügbar ist:

Screenshot der Fehlermeldung "Keine Quelle verfügbar"

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Wenn ich zur Disassemblierungsansicht wechsle, bevor ich versuche, in .NET-Code einzusteigen ( Debug -> Windows -> Disassembly ), kann ich einen callin den .NET-Code sehen:

Screenshot des Codes

Und wenn ich das tue, debugge ich am Ende eine Demontage von System.Windows.Forms.ScaleControl:

Screenshot des Demontagefensters

Dies ist nicht dasselbe oder so nützlich wie das Betreten der .NET Framework-Quelle.

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Der konfigurierte Symbol-Cache-Pfad auf meinem Computer enthält Symbol-Cache-Dateien:

Screenshot der Ordnerliste

Es werden also pdbSymboldateien heruntergeladen , aber nicht verwendet.

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Leppie schlug vor, das DebugProtokoll zu überprüfen (bei geöffnetem Debug-Protokollfenster; sonst wird nichts protokolliert):

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Früher im Protokoll sehe ich, dass Symbole geladen werden für System.Windows.Forms.dll:

Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.

Geben Sie hier die Bildbeschreibung ein

Es findet also meine Symbole, behauptet aber, dass es sie nicht finden konnte.

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Ein Mitarbeiter von Microsoft Italien schlägt vor, Quelldateien erforderlich zu deaktivieren, damit sie genau mit der Originalversion übereinstimmen :

Screenshot des Optionsfensters

Das hat es nicht behoben.

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Es wurde vermutet, dass ein Fehler mit dem Quellserver von Microsoft für .NET Framework 4.0 vorliegt . Auf diesen Vorschlag hin habe ich das Projekt auf .NET Framework 3.5 umgestellt :

Geben Sie hier die Bildbeschreibung ein

Das hat es nicht behoben.

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Jemand fragte sich müßig, ob eine andere Person, bei der das gleiche Problem auftrat , die 64-Bit-Version des Debuggers verwendete . Derzeit gibt es keine 64-Bit-Version von Visual Studio, aber ich habe versucht, mein Projekt von AnyCPU auf x86 umzustellen (es wurde auf x64 JITed), falls Microsoft keine 64-Bit-Prozessoren unterstützt:

Geben Sie hier die Bildbeschreibung ein

Das hat es nicht behoben:

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Wie aktiviere ich .NET Framework-Quellschritt in Visual Studio 2010?


Siehe auch

Ian Boyd
quelle
Haben Sie den Quellcode 'Cache' überprüft?
Leppie
@leppie Was meinst du mit "Quellcode 'Cache'"? Wenn Sie den Ordner meinen, in dem der Quellcode zwischengespeichert wird, wird er
Ian Boyd
Ja. Ist es möglich, diese Quelldatei zu öffnen und einen Haltepunkt festzulegen?
Leppie
1
ausgezeichnetes Schreiben der Ausgabe!
andersonbd1
1
Es funktioniert auch nicht in VS2012. Es hat einen Tag lang funktioniert, nachdem ich alles konfiguriert und einfach aufgehört hatte zu arbeiten. Zwei Tage, Dutzende von Kassen, Hunderte von Webseiten später funktioniert es einfach nicht. Gleichzeitig wirken von symbellsource.org veröffentlichte Quellen wie ein Zauber.
Wiktor Zychla

Antworten:

35

Die PDBs zum Durchlaufen des Quellcodes werden nur für RTM- und Service Packs bereitgestellt. Wenn ein Sicherheitsupdate veröffentlicht wird und die zu debuggende DLL geändert wird, funktioniert das Quell-Stepping nicht (dh Sie erhalten "Keine Quelle verfügbar" mit einem ausgegrauten "Nach Quelle suchen" ").

Sobald Sie jedoch alle entsprechenden Einstellungen vorgenommen haben, können Sie die folgende Problemumgehung verwenden. Die Problemumgehung besteht im Wesentlichen darin, die Sicherheitsupdates zu finden, durch die sich die DLL geändert hat, und sie dann zu entfernen. Dies hat den offensichtlichen Nachteil, dass diese Sicherheitsupdates auf Ihrem Computer entfernt werden.

Problemumgehung

  1. Identifizieren Sie, in welche DLL Sie debuggen möchten (z. B. System.Windows.Forms.dll).
  2. Öffnen Sie während des Debuggens das Fenster " Module" in Visual Studio und suchen Sie die Spalte " Version" . Wenn es sich bei der Version nicht um die RTM- oder Service Pack-Version handelt, müssen Sie den Workflow ausführen. Normalerweise sagt die RTM-DLL "Erstellt von: RTMRel". Während eine DLL, die Teil eines Sicherheitsupdates war, "erstellt von: RTMGDR" sagt. Notieren Sie sich die Versionsnummer (zum Beispiel 4.0.30319.269, erstellt von: RTMGDR)
  3. Jetzt möchten wir das Update finden, mit dem diese Version erstellt wurde. Suchen Sie dazu unter support.microsoft.com/kb/ nach der DLL und der Versionsnummer. Beispielsweise habe ich die folgende Google-Suche durchgeführt: site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. Bei der Suche sollten Informationen zu einem Update angezeigt werden. Notieren Sie die KB-Nummer in der Adressleiste. In meinem Beispiel war die Adresse http://support.microsoft.com/kb/2604121, also KB2604121, das, woran wir interessiert sind.
  5. Gehen Sie zu Systemsteuerung-> Programme und Funktionen und klicken Sie auf "Installierte Updates anzeigen".
  6. Suchen Sie ein Update, in dem die KB-Nummer aufgeführt ist (Sie können die Suche im oberen rechten Feld verwenden).
  7. Deinstallieren Sie dieses Update.
  8. Wiederholen Sie diesen Vorgang für dieselbe DLL, bis die DLL wieder die RTMRel- oder SP-Version hat. Für System.Windows.Forms.dll musste ich beispielsweise KB2686827, KB2604121, KB2518870 entfernen, bevor es wieder auf die RTMRel-Version zurückgesetzt wurde.

Sie müssen dies für jede DLL innerhalb des .NET-Frameworks tun, in die Sie das Debuggen ausführen möchten.

Legen Sie anschließend einen Haltepunkt in der .net-Quelle fest (gehen Sie beispielsweise zur Registerkarte Haltepunkte, sagen Sie Neu-> Unterbrechen bei Funktion, und geben Sie System.Windows.Forms.Form.Form ein), oder betreten Sie eines der .net-Elemente Methoden in dieser DLL.

Matt Smith
quelle
1
Richtig, der Trick besteht darin, die richtigen zu deinstallierenden zu finden (da normalerweise viele installiert sind und die Deinstallation eine Weile dauert).
Matt Smith
Ich kann Sicherheitsupdates nicht deinstallieren. Es ist gegen die Unternehmenspolitik. Gibt es eine Möglichkeit, Kopien von mscorlib.dll (und anderen) abzurufen, die mit dem Microsoft Symbols-Server übereinstimmen? Meine mscorlib.dll ist Version 4.0.30319.269 (RTMGDR.030319-2600). Möglicherweise könnte ich GAC vorübergehend mit dieser neuen DLL aktualisieren und versuchen, die Quelle zu erweitern.
Kevinarpe
Es ist wahrscheinlich auch gegen meine Unternehmensrichtlinien - ich installiere sie einfach neu, nachdem ich fertig bin. Ich glaube nicht, dass Sie einfach eine alte Version mscorlib.dll einbinden könnten, unabhängig von den anderen DLLs, die damit zurückgesetzt werden sollten (damit es richtig funktioniert). Darüber hinaus würde eine vorübergehende Aktualisierung des GAC mit alten DLLs im Wesentlichen einer vorübergehenden Deinstallation des Sicherheitsupdates entsprechen.
Matt Smith
Der wahrscheinliche Grund, warum Microsoft keine Quelle für Sicherheitsupdates veröffentlicht, besteht darin, dass jemand die Codeänderungen vergleichen, die Sicherheitslücke verstehen und eigene Exploits erstellen kann. Was Microsoft nicht erkennt, ist, dass der "Quellcode" bereits mit ILSpy oder Relfector verfügbar ist. Wenn Microsoft den Quellcode nicht veröffentlicht, wird niemand sicherer - es ist nur ein schwierigeres Leben für Entwickler.
Ian Boyd
2
@ IanBoyd Ich bezweifle, dass dies die Motivation von MS ist. Ich würde annehmen, dass ihr Workflow das Aktualisieren von Quell-PDBs zum Debuggen einfach nicht unterstützt. Sie befassen sich hauptsächlich mit dem Schließen von Sicherheitslücken.
Xanadont
6

Zwar gibt es leider ein Problem mit einem Microsoft, wie Leppie betonte (und ich habe das gleiche Ergebnis gesehen

Es sollte beachtet werden, dass Ihr Versuch sowieso fehlschlagen würde, da Sie verwiesen haben:

  • Microsoft Symbol Server

anstatt:

  • referencesource.microsoft.com/symbols

Weitere Informationen finden Sie im Abschnitt FAQ / Fehlerbehebung unter Konfigurieren von Visual Studio zum Debuggen von .NET Framework-Quellcode

yoel halb
quelle
4

Ich habe die Antwort gefunden, denke ich.

Ich verfolgte, was auf Fiddler geschah. Es scheint, dass derzeit nur die Symbole verfügbar sind und keine Quelle.

Wenn VS versucht, die Symbole vom 'Referenzquellen'-Server zu laden, schlägt dies fehl (404). Da dies fehlschlägt, kann es meiner Meinung nach nicht den Quelldateien auf diesem Server zugeordnet werden.

http://referencesource.microsoft.com/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pdb

Nach dem oben genannten Fehler versucht es einen Server namens 'msdl', auf dem der tatsächliche PDB gefunden wird (aber es scheint, dass dieser keine Quellcode-Informationen hat).

http://msdl.microsoft.com/download/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pd_

Alles in allem scheint es sich um ein (vorübergehendes) Microsoft-Problem mit den Servern zu handeln.

Ich bin sicher, ich hatte vor einiger Zeit einen Quellcode. Aber jetzt funktioniert es nicht.

Bearbeiten:

Ich habe es mit verschiedenen .NET-Versionen versucht, alle das gleiche Ergebnis. :((

Leppie
quelle
1
Nun , das wäre sehr interessant , wenn meine genauen Schritte sollten funktionieren (aber nicht), werden arbeiten (in der Zukunft), und tun Arbeit (aber nicht heute). Es wäre auch außerordentlich frustrierend, da ich 11 Stunden mit dem Problem verbracht habe.
Ian Boyd
2
msdl.microsoft.com scheint Microsoft Symbol Server zu sein
yoel halb
2
und es ist wieder kaputt
Simon_Weaver
Scheint 7 Jahre später kein "temporäres Serverproblem" zu sein und die Links sind immer noch tot.
jrh
1

In meinem Fall habe ich eine alte .NET 2.0 WinForms- Anwendung debuggt und die Meldung "Quelle nicht verfügbar" erhalten . Ich habe alle empfohlenen Einstellungen ausprobiert.

Letztendlich habe ich die App so umgebaut, dass sie vorübergehend auf .NET 4.5 abzielt, und konnte die Quelle zum Laufen bringen. Vielleicht war meine App einfach zu alt, um die Quelle zu betreten. Ich weiß, dass dies den Zweck irgendwie zunichte macht, aber für schnelle und schmutzige Tests funktioniert es. Der Fehler, den ich habe, ist in .NET 4.5 immer noch vorhanden . :) :)

Ziel-Framework

Brian Chavez
quelle
0

Hier sind die offiziellen Anweisungen https://referencesource.microsoft.com/setup.html

Konfigurieren Sie Visual Studio 2013 für das Debuggen von .NET Framework

Um Visual Studio 2013 zu konfigurieren, gehen Sie im Menü Extras -> Optionen -> Debuggen -> Allgemein wie folgt vor:

  • Deaktiviere nur meinen Code
  • Deaktivieren Sie den Schritt über Eigenschaften und Operatoren
  • Deaktivieren Sie erfordern Quelldateien, um genau mit der Originalversion übereinzustimmen
  • Aktivieren Sie den .NET Framework-Quellschritt
  • Aktivieren Sie die Quellserverunterstützung
Oberst Panik
quelle