Open drcid98 opened 7 months ago
La diferencia es que se generan 2 ejecutables distintos segun los flags del compilador que se especifican en CMakeLists.txt
.
En debug están los flags exclusivos:
-O0 -g3 -fsanitize=undefined,address -fno-omit-frame-pointer
-O0
es el nivel de optimización de nivel más baja, lo cual es útil si quieres debuguar linea a linea, porque niveles más altos de optimización de código te pueden eliminar cosas o cambiearles el orden.
-g3
guarda información útil para el debugueo en el ejecutable, por ejemplo el nombre de las funciones, el nombre del archivo donde se definen y la linea de código.
-fsanitize=undefined,address
activa el sanitizer, que te avisará si se accede a una posición de memoria que no reservaste previamente, si se te olvida liberar memoria o si haces alguna operación definida como undefined behaviour.
-fno-omit-frame-pointer
desactiva una optimización que puede hacer el debugueo imposible en algunas máquinas.
Además en el build Debug se define el macro NDEBUG
, que activa los assert
. También te permite poner código que se ejecutaría solo en el modo debug:
#ifndef NDEBUG
// code that executes only on Debug build
#endif
En release están los flags exclusivos:
-O3 -g0
-O3
activa el nivel más agresivo de optimizaciones por parte del compilador
-g0
guarda el mínimo de información necesaria en el programa (para que pese menos).
Solo para aclarar, se entrega la carpeta src
del proyecto. Por lo tanto, el cómo compilan no influirá en cómo los evaluaremos.
Wenas, quizás es una duda muy básica, pero cuál es la diferencia entre hacer el build de debug o release? Se espera que hagamos uno en específico? Hay alguna diferencia real entre uno u otro? Gracias!