Es kann sein, dass Sie Ihren CMake-Build debuggen müssen oder Ihren C++-Code debuggen wollen. Beides wird hier behandelt.
CMake Debugging
Zunächst schauen wir uns an, wie man eine CMakeLists oder eine andere CMake-Datei debuggen kann.
Drucken von Variablen
Die altbewährte Methode der Druckanweisungen sieht in CMake so aus:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
Ein eingebautes Modul macht dies jedoch noch einfacher:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
Wenn man eine Eigenschaft ausdrucken will, ist das viel, viel schöner! Anstatt die Eigenschaften eines jeden Ziels (oder eines anderen Elements mit Eigenschaften, wie SOURCES
, DIRECTORIES
, TESTS
oder CACHE_ENTRIES
– globale Eigenschaften scheinen aus irgendeinem Grund zu fehlen) einzeln abzurufen, kann man sie einfach auflisten und direkt ausdrucken lassen:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Verfolgung eines Laufs
Wollten Sie schon immer mal genau beobachten, was in Ihrer CMake-Datei passiert und wann? Die Funktion --trace-source="filename"
ist fantastisch. Jede Zeile in der Datei, die Sie angeben, wird auf dem Bildschirm wiedergegeben, wenn sie ausgeführt wird, so dass Sie genau verfolgen können, was passiert. Es gibt auch verwandte Optionen, aber die neigen dazu, dich in der Ausgabe zu begraben.
Zum Beispiel:
cmake -S . -B build --trace-source=CMakeLists.txt
Wenn du --trace-expand
hinzufügst, werden die Variablen in ihre Werte expandiert.
Erstellung im Debug-Modus
Für Generatoren mit einer Konfiguration kannst du deinen Code mit -DCMAKE_BUILD_TYPE=Debug
erstellen, um Debugging-Flags zu erhalten. Bei Multikonfigurations-Generatoren, wie bei vielen IDEs, können Sie die Konfiguration in der IDE auswählen. Es gibt verschiedene Flags für diesen Modus (Variablen, die auf _DEBUG
enden, im Gegensatz zu _RELEASE
), sowie einen Generator-Ausdruckswert CONFIG:Debug
oder CONFIG:Release
.
Nachdem Sie einen Debug-Build erstellt haben, können Sie einen Debugger, wie gdb oder lldb, darauf laufen lassen.