Comment utiliser gprof avec cmake
J'ai regardé des dizaines de tutoriels pour profilage gprof. Je suis en train de travailler avec le code pour le solveur SMT dReal. Pour construire le programme, j'ai d'abord installé g++-4.8, de Bison, Flex, et Cmake. Puis à construire dReal, les instructions, a déclaré à exécuter les opérations suivantes:
git clone [email protected]:soonhokong/dReal.git dreal
cd dreal
mkdir -p build/release
cd build/release
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_CXX_COMPILER=g++-4.8 -DCMAKE_C_COMPILER=gcc-4.8 ../../src
make
Où ici je suis censé ajouter le -pg
? Je suis nouveau en programmation, donc le raisonnement par opposition à une réponse serait très appréciée. Je sais que vous êtes censé ajouter le -pg
à la phase de compilation, mais tous les tutoriels dire de le mettre après le g++ ou gcc. Je ne trouve pas comment modifier le code pour cmake. J'ai essayé de changer le type de génération de PROFIL, mais cela n'a pas aidé.
OriginalL'auteur Phdetermined | 2014-10-21
Vous devez vous connecter pour publier un commentaire.
Afin d'utiliser gprof, vous devez compiler et lien avec l'
-pg
option.CMakeLists.txt doit avoir une installation comme Ami Tavory mentionné, où les options de ligne de commande sont combinés avec codé en dur, alors un bon moyen de le faire avec un bien construit cmake projet est:
OriginalL'auteur zzmp
Je suis Soonho Kong, l'un des responsables de la dReal. Il serait plus facile pour nous de répondre à des questions concernant la dReal, si tu mets le "dreal" tag sur la question.
En général, vous pouvez passer les drapeaux de compilation comme
-pg
à cmake en cours d'exécution:cmake -DCMAKE_CXX_FLAGS=-pg
Pour le profilage, j'ai l'habitude d'utiliser valgrind + callgrind.
Pour mesurer la couverture de code, nous utilisons gcov et lcov outils. Vous pouvez prendre un coup d'oeil à comment nous avons mis en place les drapeaux du compilateur pour cela, qui peuvent vous aider à définir vos propres options du compilateur pour gprof.
CMakeLists.txt
, j'aiset(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} blah blah blah")
, qui combine codé en dur trucs avec les trucs fournis à partir de la ligne de cmd.Ne passant comme ça écraser les autres indicateurs définis dans
CMakeLists.txt
(ou inclus .cmake fichiers), ou est-il ajouté / annexé au projet de MAKE_CXX_FLAGS ? Cela sera transmis à l'éditeur de liens (je suppose que le programme doit être lié avec-pg
ainsi)?Il fonctionne pour moi, mais j'ai ajouté -DCMAKE_C_FLAGS=-pg -DCMAKE_CXX_FLAGS=-pg -DCMAKE_BUILD_TYPE=Debug Puis-je exécuter l'application, seul, après que j'utilise gprof pour ouvrir une session de profilage. > cmake -DCMAKE_C_FLAGS=-pg -DCMAKE_CXX_FLAGS=-pg -DCMAKE_BUILD_TYPE=Debug .. > make > ./application > gprof ./application gmon.out > profile.txt > gprof ./application -l gmon.out > profile_line.txt
gprof
etvalgrind+callgrind
faire des choses différentes et vous donner des réponses différentes.OriginalL'auteur Soonho Kong