2010-02-20 6 views
6

Estoy intentando depurar algún código en .NET Framework. Desafortunadamente, muchas de las variables están optimizadas y no puedo establecer de manera confiable el puntero de instrucción debido a las optimizaciones de flujo.¿Es posible depurar las DLL del sistema .NET como no optimizadas?

¿Es posible forzar el tiempo de ejecución para NO utilizar las versiones ngen'd de las DLL del sistema .NET, sino que en su lugar usar MSIL, forzando la optimización a 'off'?

Nota: He intentado utilizar el truco de INI para establecer AllowOptimize = false, pero no hizo ninguna diferencia.

Respuesta

6

Obtuve la respuesta de John Robbins. Básicamente, adhiera COMPLUS_ZapDisable = 1 en su entorno (envuelva en un bate para evitar ejecutar todo el sistema sin optimizar) y desactive el proceso de alojamiento VS.

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

Otra opción es el nuevo Pro .NET Reflector que le permite descompilar selectivamente/recompilar asambleas no optimizadas. No es necesario con el origen de referencia sino una buena copia de seguridad.

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

+1

¿Sabes cómo hacer que esto funcione con ASP.NET? El proceso IIS no se inicia desde VS, por lo que es probable que no se vea afectado por la variable env. – DenNukem

1

¿Por qué no ves el código de .NET framework en sí con Reflector? Reflector le permite ver el código de cualquier ensamblado .NET [incluido el propio .NET framework!], ¡E incluso recompilarlo! - ¡Por supuesto, esto se aplica a las asambleas no ofuscadas!

+0

ya estoy pasando a través de fuente de Microsoft directamente a través de su servidor de origen de referencia. He usado Reflector para recompilar ensamblajes simples en el pasado, pero las DLL del sistema a menudo son una mezcla de nativo y administrado. También están firmados, lo que probablemente me impida anular sus referencias internas. – scobi

11

Aquí es otra opción (de http://martin.bz/asp-net-mvc-source-debugging-the-easy-way):

Ir al directorio donde se encuentra System.Web.Mvc .dll:

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

Crear el archivo System.Web.Mvc.ini

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

La próxima vez que entre en el código fuente de MVC puede inspeccionar todas las variables .

Más detalles en http://msdn.microsoft.com/en-us/library/9dd8z24x.aspx

+2

Para aplicar esta técnica a cualquier otro ensamblaje en general, busque la carpeta adjuntando un depurador VS y abriendo: DEPURACIÓN> Windows> Módulos. – John

+0

Mine (Windows 10) está en C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Web.Mvc \ v4.0_4.0.0.1__31bf3856ad364e35 –

Cuestiones relacionadas