DiegoEmilio01 / IIC3413

Repositorio del curso Implementación de Sistemas de Bases de Datos
16 stars 2 forks source link

Build del proyecto #7

Open drcid98 opened 3 months ago

drcid98 commented 3 months ago

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!

cirojas commented 3 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).

En resumen:

DiegoEmilio01 commented 3 months ago

Solo para aclarar, se entrega la carpeta src del proyecto. Por lo tanto, el cómo compilan no influirá en cómo los evaluaremos.