Vous pourriez avoir besoin de déboguer votre construction CMake, ou de déboguer votre code C++. Les deux sont couverts ici.
Débogage CMake
D’abord, regardons les façons de déboguer une CMakeLists ou un autre fichier CMake.
Imprimer des variables
La méthode honorée du temps des déclarations d’impression ressemble à ceci dans CMake:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
Pourtant, un module intégré rend cela encore plus facile:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
Si vous voulez imprimer une propriété, c’est beaucoup, beaucoup plus agréable ! Au lieu d’obtenir les propriétés une par une de chaque cible (ou autre élément avec des propriétés, comme SOURCES
, DIRECTORIES
, TESTS
, ou CACHE_ENTRIES
– les propriétés globales semblent manquer pour une raison quelconque), vous pouvez simplement les lister et les faire imprimer directement:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Tracer une exécution
Avez-vous déjà voulu regarder exactement ce qui se passe dans votre fichier CMake, et quand ? La fonctionnalité --trace-source="filename"
est fantastique. Chaque ligne exécutée dans le fichier que vous donnez sera répercutée à l’écran lors de son exécution, vous permettant de suivre exactement ce qui se passe. Il existe également des options connexes, mais elles ont tendance à vous enterrer dans la sortie.
Par exemple :
cmake -S . -B build --trace-source=CMakeLists.txt
Si vous ajoutez --trace-expand
, les variables seront développées dans leurs valeurs.
Construction en mode débogage
Pour les générateurs à configuration unique, vous pouvez construire votre code avec -DCMAKE_BUILD_TYPE=Debug
pour obtenir des drapeaux de débogage. Dans les générateurs multi-configuration, comme de nombreux IDE, vous pouvez choisir la configuration dans l’IDE. Il y a des drapeaux distincts pour ce mode (variables se terminant par _DEBUG
par opposition à _RELEASE
), ainsi qu’une valeur d’expression de générateur CONFIG:Debug
ou CONFIG:Release
.
Une fois que vous faites une construction de débogage, vous pouvez exécuter un débogueur, comme gdb ou lldb dessus.