2010-02-20 5 views
6

Ich versuche, etwas Code in .NET Framework zu debuggen. Leider sind viele der Variablen wegoptimiert und ich kann den Befehlszeiger aufgrund von Flussoptimierungen nicht zuverlässig setzen.Ist es möglich, die .NET DLL des Systems als nicht optimiert zu debuggen?

Ist es möglich, die Laufzeit zu zwingen, die neuen Versionen der .NET-System-DLLs NICHT zu verwenden, sondern stattdessen die MSIL zu verwenden und die Optimierung auf 'aus' zu setzen?

Hinweis: Ich habe versucht, mit dem INI-Trick AllowOptimize = false zu setzen, aber das machte keinen Unterschied.

Antwort

6

Haben Sie die Antwort von John Robbins. Im Grunde genommen kleben Sie COMPLUS_ZapDisable = 1 in Ihren env vars (wickeln Sie sie in einen Bat, um zu vermeiden, dass das ganze System nicht optimiert wird) und deaktivieren Sie den VS-Hosting-Prozess.

http://blogs.msdn.com/sburke/archive/2008/01/29/how-to-disable-optimizations-when-debugging-reference-source.aspx

Eine weitere Option ist die neue .NET Reflector Pro, die Sie selektiv decompile/neu kompilieren Baugruppen unoptimized können. Nicht notwendig mit Referenzquelle, aber ein gutes Backup.

http://www.red-gate.com/products/reflector/features_pro.htm

+1

Wissen Sie, wie dies mit ASP.NET funktioniert? Der IIS-Prozess wird von VS nicht gestartet, daher wird er wahrscheinlich nicht von der Umgebungsvariablen beeinflusst. – DenNukem

1

Warum sehen Sie nicht den Code von .NET Framework selbst mit Reflector? Mit Reflector können Sie den Code einer beliebigen .NET-Assembly (einschließlich des .NET-Frameworks selbst!) Sehen und sogar neu kompilieren! - Dies gilt natürlich auch für nicht verschleierte Baugruppen!

+0

Ich trete schon durch Quelle von Microsoft direkt ihre Referenzquellserver verwenden. Ich habe Reflector verwendet, um einfache Assemblys in der Vergangenheit neu zu kompilieren, aber die System-DLLs sind oft eine Mischung aus nativen und verwalteten. Sie sind auch signiert, was mich wahrscheinlich davon abhält, ihre internen Referenzen zu überschreiben. – scobi

11

Hier ist eine andere Option (von http://martin.bz/asp-net-mvc-source-debugging-the-easy-way):

Gehen Sie in das Verzeichnis, in dem System.Web.Mvc DLL befindet:

c: \ Windows \ assembly \ GAC_MSIL \ System.Web.Mvc \ 2.0.0.0__31bf3856ad364e35 \

erstellen Sie die Datei System.Web.Mvc.ini

[.NET Framework Debugging Control] 
GenerateTrackingInfo=1 
AllowOptimize=0 

Wenn Sie das nächste Mal den MVC-Quellcode eingeben, können Sie alle Variablen überprüfen.

Weitere Details unter http://msdn.microsoft.com/en-us/library/9dd8z24x.aspx

+2

Um diese Technik auf eine andere Assembly im Allgemeinen anzuwenden, suchen Sie den Ordner, indem Sie einen VS-Debugger anfügen und öffnen: DEBUG> Windows> Module. – John

+0

Mine (Windows 10) befindet sich unter C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Web.Mvc \ v4.0_4.0.0.1__31bf3856ad364e35 –

Verwandte Themen