J'utilise Scientifique Linux (SL). J'essaie de compiler un projet qui utilise un groupe de fichiers C++ (.CPP).
Dans le répertoire user/project/Build
, Je saisis make
pour compiler et relier tous les fichiers .cpp. Je dois ensuite aller à user/run/
, puis tapez ./run.sh values.txt
Pour déboguer avec GDB, je dois aller à user/run
, puis tapez gdb ../project/Build/bin/Project
et à courir, j'entre run -Project INPUT/inputfile.txt
. Cependant, j'essaie d'imprimer la valeur de la variable à l'aide de p variablename
.
Cependant, je reçois le message s1 = <value optimized out>
. J'ai fait des recherches en ligne et il semble que j'ai besoin de compiler sans optimisations en utilisant -O0
Pour résoudre ce problème. Mais où dois-je entrer ça? Dans le CMakeLists
? Si oui, quels cmakelistes? Celui de project/Build
ou project/src/project
?
La réponse de la puce a été utile, cependant depuis la ligne SET
la ligne écrasante CMAKE_CXX_FLAGS_DEBUG
cela a supprimé le -g
Par défaut, ce qui a entraîné une construction de mon exécutable sans informations de débogage. Je devais faire une petite modification supplémentaire à Cmakelists.txt dans le répertoire source de projet pour obtenir un exécutable construit avec des informations de débogage et-O0
Optimisations (sur la version cuma 2.8.12.2).
J'ai ajouté ce qui suit à Cmakelists.txt pour ajouter -O0
et part -g
activée:
# Add -O0 to remove optimizations when using gcc
IF(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
ENDIF(CMAKE_COMPILER_IS_GNUCC)
Cela ajoute le -O0
Optimisation des indicateurs déjà utilisés pour débogage par CMAKE et est uniquement inclus pour les bâtiments de la GCC si vous utilisez un projet Cross Platform.
Ou au temps d'invocation:
cmake -DCMAKE_BUILD_TYPE=DEBUG \
-DCMAKE_C_FLAGS_DEBUG="-g -O0" \
-DCMAKE_CXX_FLAGS_DEBUG="-g -O0"
puis confirmez avec:
make VERBOSE=1
pour afficher les commandes de construction de GCC comme expliqué à l'adresse suivante: https://stackoverflow.com/questions/5820303/how-do--force-make-gcc-to-show-me-the-commands
Testé sur Ubuntu 17.04, CMAKE 3.7.2.
Ajoutez ceci à cmakelists.txt (celui dans le répertoire source de projet; ne touchez rien dans le répertoire de construction):
SET(CMAKE_CXX_FLAGS_DEBUG "-O0")
SET(CMAKE_C_FLAGS_DEBUG "-O0")
puis
$ cmake -DCMAKE_BUILD_TYPE=Debug
marchera. Vous pouvez également simplement ajouter ceci à cmakelists.txt:
SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")