Depuración de Bitcoin Core con gdb: cómo desactivar las optimizaciones del compilador

Ejecuté el script de configuración con la --enable-debugbandera, luego ejecuté make. Estoy ejecutando pruebas unitarias:

gdb --args src/test/test_bitcoin --log_level=all --run_test=script_standard_tests

Estoy tratando de pasar por la ejecución de los archivos fuente usando gdb, pero todavía obtengo <optimized out>muchas variables y se saltan líneas aquí y allá. Pensé que la --enable-debugbandera desactivaría la optimización, pero ¿me equivoco? Me pregunto si la optimización siempre está activada para las pruebas o si hay alguna forma de desactivarlas.

Respuestas (2)

Bitcoin Core se deshabilita -O2y se habilita -Ogcuando --enable-debugestá configurado. -Ogestá destinado a la depuración; sin embargo, elimina parte de la información de depuración y tiene errores. Para deshabilitarlo y mejorar la experiencia de depuración, sugiero cambiar entre L256 y L278 a:

CXXFLAGS="-ggdb3 -ftrapv"

-ggdb3es más poderoso que -g3, utiliza un dialecto incompatible con LLDB solo para GDB para la depuración. Esto también eliminará -O2, excepto en libsecp256k1.

Editar: Sipa sugiere una forma más elegante sin alterar los archivos autoconf, que es agregar argumentos para configurar.

./configure CXXFLAGS="-O0 -ggdb3"

O0 es necesario en este caso.

Buena solución, gracias. Todavía estoy recibiendo <optimized out>, sin embargo, me debe estar perdiendo algo.
Ahora está mostrando todas las variables. Debo no haber recompilado el archivo correctamente.
¡Me alegro de haber podido ayudar! :)
Si desea evitar todos los "<compilados>", debe compilar con "-O0" para deshabilitar todas las optimizaciones.
Además, no es necesario modificar configure.ac, puede anular las cosas en la línea de comando usando ./configure CXXFLAGS="-O0 -ggdb3" ....
@PieterWuille el manual ( gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html ) dice que O0 es predeterminado en GCC, pero estoy de acuerdo con el segundo, lo editaré pronto.
@MCCCS Pero --enable-debugpasará -Og, lo que anula el -O0valor predeterminado.
¿Por qué no --enable-debugusa -O0?

A partir de PR # 16435, --enable-debug en realidad está configurando "-O0", por lo que ya no debería haber ninguna optimización.