Instrucciones para usar (GNU) gcov en Windows ============================================= 1) Compile el programa con "-fprofile-arcs -ftest-coverage" 2) Ejecute el programa ZZZ.exe 3) Genere los archivos de cobertura de instrucciones con gcov.exe 4) Examine los resultados (*.gcov) - gcov es un programa de línea de comandos :: 1) compile el programa g++.exe -c test_CSV.cpp -o test_CSV.o -I"include" -fprofile-arcs -ftest-coverage g++.exe -c CSV.cpp -o CSV.o -I"include" -fprofile-arcs -ftest-coverage g++.exe test_CSV.o CSV.o -o "ZZZ.exe" -L"lib" libgcov.a :: 2) Ejecución ZZZ.exe :: 3) gcov gcov.exe -a CSV.cpp gcov.exe -a test_CSV.cpp ::4) Examinar resultados notepad CSV.cpp.gcov Las opciones "-fprofile-arcs -ftest-coverage" le indican al compilador que genere los datos que gcov necesita (básicamente un grafo de flujo del programa) y además incluye en el programa ejecutable el código requerido para generar en tiempo de ejecución los datos del perfil de ejecución usados por gcov. Estos archivos adicionales *.gcda *.gcno aparecen en el mismo directorio en donde están localizados los programas fuente. Es necesario compilar sin optimizaciones el programa pues de lo contrario gcov no podrá asociar sus estadísticas con el programa fuente. Es necesario ejecutar el programa para que durante esa ejecución sean creados los archvivos *.gcda *.gcno que usa gcov para construir las estadísticas de cobertura para la ejecución del programa. Si este paso fundamental no se ejecuta, no existen los datos que gcov necesita para generar los reportes de ejecución, Los archivos que gcov genera son archivos de texto con extensión .gcov; para examinarlos basta usar NOTEPAD.exe o cualquier otro editor de texto. Compilación en el ambiente Dev-C++ ================================== El compilador g++.exe es un programa ejecutable que recibe todos sus argumentos en la línea de comandos. Para que en el ambiente Dev-C++ el compilador g++.exe sea invocado con las opciones -f para gcov es necesario agregar en el proyecto [*.dev] estas 2 indicaciones: - Alt-P ==> Project ==> Proyect options ==> Parameters ==> C++ compiler [ -fprofile-arcs -ftest-coverage ] ==> linker [ "C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/libgcov.a" ] [ "C:/Program Files/Dev-Cpp/lib/gcc/mingw32/3.4.2/libgcov.a" ] ==> [[ OK ]] El resultado de estas acciones es que en el archivo del proyecto *.dev quedan agregados estos 2 renglones: 1) CppCompiler=-fprofile-arcs -ftest-coverage_@@_ 2) Linker=C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/libgcov.a_@@_ El primer renglón le indica al compilador que debe usar las opciones -f... que para generar el código gcov. El segundo le indica al ligador de eslabonamiento [linker] que al construir el programa incluya también la librería "libgcov.a" que contiene las rutinas gcov que recolectan las estadísticas en tiempo de ejecución (la razón por la que al final de estos renglones aparece la hilera [_@@_] hay que averiguarla cuestionando a quien programó Dev-C++). Compilación en el ambiente Code::Blocks 10.05 ============================================= http://www.cs.odu.edu/~cs333/website-s11/Lectures/wbtesting/pages/gcov.html Code::Blocks es un ambiente de programación similar a Dev-C++ aunque para muchos es un poco más cómodo de usar. La forma en que se agregan al proyecto las opciones para el compilador y para el ligador de eslabonamiento son similares: - Alt-P ==> Project ==> Build Options ==> [Choose the Debug instead of Release] ==> /Compiler Settings\ ==> /Other options\ -fprofile-arcs -ftest-coverage ==> /Linker Settings\ ==> /Link libraries\ "%ProgramFiles%\CodeBlocks\MinGW\lib\gcc\mingw32\4.4.1\libgcov.a" [la versión 4.4.1 puede variar] Compilación en el ambiente Unix =============================== g++.exe -c test_CSV.cpp -o test_CSV.o -I"include" -fprofile-arcs -ftest-coverage g++.exe -c CSV.cpp -o CSV.o -I"include" -fprofile-arcs -ftest-coverage g++.exe test_CSV.o CSV.o -o "ZZZ.exe" -L"lib" libgcov.a Ejecución de gcov ================= El comando gcov.exe generalmente está en un subdirectorio del sitio en que está instalado el compilador. Por eso, para ejecutar gcov hay que usar un compando similar a éste: X:\DIR\SubDir> C:\Dev-Cpp\bin\gcov.exe CSV.cpp Un archivo de comandos .BAT similar a áste tambián puede ser util: :: gcov.bat ==> Jala el comando gcov.exe @echo off :: 1) Compile el programa con "-fprofile-arcs -ftest-coverage" :: 2) Ejecute el programa ZZZ.exe ZZZ.exe :: 3) Genere los archivos de cobertura de instrucciones con gcov.exe :: - Los archivo *.gc* deben estar en el mismo directorio que el ejecutable move .\Debug\obj\*.gcda . move .\Debug\obj\*.gcno . "%ProgramFiles%\CodeBlocks\MinGW\bin\gcov.exe" -a CSV.cpp "%ProgramFiles%\CodeBlocks\MinGW\bin\gcov.exe" -a test_CSV.cpp move *.gcda .\Debug\obj move *.gcno .\Debug\obj :: 4) Examine los resultados (*.gcov) goto _out :_out :: gcov.bat ==> Fin de archivo Interpretación de los resultados gcov ===================================== Los renglones del archivo.gcov que contiene " #####: " son los que nunca fueron ejecutados. En programas de prueba, estos son renglones que nunca fueron ejecutados porque los datos de prueba fueron insuficientes. Los renglones que tienen un guión nada más " -: " son renglones que no contienen instrucciones ejecutables.