2009-05-06 13 views
4

Bis jetzt habe ich immer die ASP.NET MVC Framework-Quelle zum Debuggen von ASP.NET MVC verwendet. Auf meinem Laptop habe ich gerade einen anderen Ansatz versucht, nämlich das Fenster "Module" in VS zu öffnen, während ich debugge und mit der rechten Maustaste auf System.Web.Mvc klicke, dann wähle "Load Symbols from"> "Microsoft Symbol Servers".Wofür sind die öffentlichen Symbolserver von Microsoft nützlich?

VS schien tatsächlich etwas zu laden, da die Symboldatei für die System.Web.Mvc-Assembly als geladen gemeldet wurde. Außerdem sind alle Zeilen, die zu System.Web.Mvc in meinem Aufrufstapel gehören, von Grau zu Schwarz gegangen. Ich bekomme immer noch die Fehlermeldung "Quellcode nicht verfügbar", wenn ich versuche, in Code zu wechseln, der zu System.Web.Mvc gehört.

Also, ich habe die Symbole geladen, aber immer noch keinen Quellcode. Kein großes Problem, da ich es immer noch auf die alte Art debuggen kann. Aber ich frage mich, wofür die Microsoft Symbol Server dann nützlich sind?

+0

Hilarious. Siehe auch hier: http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/c5084825-06f2-4859-b9f0-61325bfeacba –

Antwort

4

Sie machen Stack-Traces funktionieren ordnungsgemäß für native DLLs - ohne Symbole gehen Ihre Stack-Traces oft nur so weit wie die nächste Windows-DLL und dann zu stoppen. Mit Symbolen fahren sie durch die Winodws-DLLs fort. Sie können die Funktionsnamen sehen, aber nicht den Quellcode (offensichtlich).

eine native Windows-Programm debuggen, erhalten Sie oft Stack-Traces wie folgt aus:

mydll.dll 
    mydll.dll 
    some_windows_dll.dll 
    some_windows_dll.dll 
    some_other_windows_dll.dll 
    some_other_windows_dll.dll 
    myexe.exe 
    myexe.exe 

Ohne die Symbole für die Windows-DLLs, werden Sie feststellen, dass der Stapel wird nur so weit:

mydll.dll 
    mydll.dll 
    some_windows_dll.dll 

und Sie können nicht den ganzen Weg zurück zum Anfang sehen.

+0

Das macht Sinn für nicht verwalteten Code, aber in verwaltetem Code kann ich den Stapel sehen für externen Code, auch ohne die Symboldateien zu verwenden.Ich frage mich also, warum sie die Symboldatei für System.Web.Mvc hosten würden, wenn das Laden der Symbole keinen Zugriff auf den Quellcode bietet. –

+0

Für verwalteten Code, weiß ich nicht. Können Sie vielleicht die Werte der Funktionsparameter sehen? – RichieHindle

1

Ich habe den Symbol-Server nicht gefunden, um für verwaltete DLLs nützlich zu sein - Sie erhalten immer noch verwaltete Stack-Traces ohne sie. Ich denke, der Hauptwert in verwalteten Symbolen ist die Zeilennummer, aber was machen Sie damit?

Ich könnte jedoch nicht ohne Symbole zum Debuggen von nativem Code leben. Und die source server ist in der Tat sehr nützlich.

+0

Danke für den Link zum Quellserver! Unglücklicherweise deckt es nicht alle Assemblies ab, aber es sieht für diejenigen, die es abdecken, sehr nützlich aus. –

2

Nach meiner Erfahrung sind Symbol-Server nützlich für verwaltete und nicht verwaltete Debugging, da sie dringend benötigte Details zur Verfügung stellen. Andere haben bereits erläutert, warum dies für nativen Code wichtig ist, also bleibe ich beim verwalteten Code.

Ich mache ein gutes Stück Debuggen von verwaltetem Code mit WinDbg + Sos und ich muss regelmäßig in den nativen Teil graben. Denken Sie daran, dass sich eine verwaltete Anwendung für das Betriebssystem nicht von einer nicht verwalteten Anwendung unterscheidet. Schließlich wird eine verwaltete Anwendung die Win32-DLLs aufrufen. Um diese zu überprüfen, brauchen Sie die richtigen Symbole.

z. Wenn Sie Details zu einem bestimmten verwalteten Anruf herausfinden möchten, müssen Sie sich den nativen Code ansehen. Ein Beispiel könnte sein, wenn Sie Monitor.Enter in Ihrem verwalteten Stack sehen. Sie können nicht wirklich sagen, ob Sie sich selbst anrufen, wenn der Anruf gerade ausgeführt wurde oder der Thread tatsächlich wartet (*). Durch das Ablegen des systemeigenen Aufruf-Stacks können Sie feststellen, ob ein Aufruf von WaitForMultipleObjects ausgegeben wurde.

(*) Die Statusflags des Befehls !threads helfen Ihnen hier, aber wenn Sie die Details wollen, ist ein Dump des nativen Stacks immer noch sehr nützlich.

Verwandte Themen