2012-06-15 19 views
6

Hace algún tiempo, leí un artículo sobre CLR, donde el autor mostró que si un proyecto se compila en modo DEPURAR, antes de que cada operador incluya un comando NOP, lo que permite depurar un código. Sin embargo, hoy descubrí que también podemos depurar en modo de lanzamiento también ... Por favor, ayúdenos a entender la diferencia.Depuración en .NET en modo de lanzamiento

+1

¿Cómo? Realmente no sé cómo se puede depurar en Release Mode – crassr3cords

+0

Me encontré con que no puedo moverme a otros asseblies mientras estaba depurando en el modo de lanzamiento –

Respuesta

1

Puede depurar en modo Liberar hasta cierto punto. Depurar y liberar son simplemente configuraciones de compilación (de las cuales puede crear muchas), la verdadera diferencia es que la configuración de depuración no optimiza el código binario generado (el código optimizado complica la depuración). También genera datos de depuración adicionales que la versión no.

+0

¿Entonces está diciendo que la configuración de Debug complica la depuración? –

+0

No, lo siento, dije que optimizar el código complica la depuración. Reescribiré eso para que no sea confuso. – erodewald

5

Depuración .net código para que pueda recorrer el código fuente mientras se ejecuta normalmente requiere de tres cosas:

  • Símbolos (el archivo .pdb relacionada) que se construyeron junto con el conjunto. DLL o .exe
  • Fuente (los Cs relacionados, .vb, etc. archivos)
  • El código de máquina de ejecución debe ser sin optimizar

Los símbolos están controlados por la bandera /debug:{full | pdbonly}. Si especifica /debug:full (incluso en una compilación de lanzamiento, con las optimizaciones del compilador desactivadas), puede adjuntarlo a un proceso ya en ejecución y pasar por el código. Si tiene /debug:pdbonly, debe usar el depurador para iniciar el programa (y no puede ver símbolos cuando se conecta a un proceso ya en ejecución).

Optimización se controla de forma granular mediante la opción /debug compilador, pero se puede controlar aún más por la /optimize-.

2

La compilación en modo de lanzamiento optimiza el binario resultante, lo que dificulta (pero no imposibilita) que el depurador sepa qué código binario vino de qué línea de línea del código fuente.

El modo de depuración está diseñado para facilitar al depurador el "seguimiento", por lo que separa las líneas de código con NOP y no optimiza el binario resultante.

+0

Quiero decir, es raro que se otorgue un control tan grande sobre estos procesos. Porque hoy vi que mi colega depuró el código sin problemas en el modo de lanzamiento y cuando le pregunté sobre esto, no lo sabía. –

+0

Sin los símbolos de depuración (archivo .pdb), el depurador no sabrá cuál era el código fuente original, pero aún podrá recorrer el código binario. AFAIK, un depurador puede adjuntar a cualquier proceso que desee, y seguirlo. El sistema operativo otorga mucha autoridad a los depuradores. –

+0

Hm, por lo que será más difícil para el depurador, ¿pero aún es posible? (Es decir, sin un archivo pdb)? –

Cuestiones relacionadas