Het kan zijn dat u uw CMake build moet debuggen, of uw C++ code moet debuggen. Beide worden hier behandeld.
CMake debugging
Laten we eerst eens kijken naar manieren om een CMakeLists of ander CMake bestand te debuggen.
Variabelen afdrukken
De aloude methode van print-statements ziet er in CMake als volgt uit:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
Een ingebouwde module maakt dit echter nog eenvoudiger:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
Als u een eigenschap wilt afdrukken, is dit veel, veel leuker! In plaats van het één voor één opvragen van de eigenschappen van elk target (of ander item met eigenschappen, zoals SOURCES
, DIRECTORIES
, TESTS
, of CACHE_ENTRIES
– globale eigenschappen lijken om de een of andere reden te ontbreken), kunt u ze eenvoudig opnoemen en direct laten afdrukken:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Tracing a run
Wilt u precies zien wat er in uw CMake bestand gebeurt, en wanneer? De --trace-source="filename"
functie is fantastisch. Elke regel in het bestand die u opgeeft, wordt naar het scherm geëchood als het wordt uitgevoerd, zodat u precies kunt volgen wat er gebeurt. Er zijn ook gerelateerde opties, maar die hebben de neiging je te begraven in output.
Voorbeeld:
cmake -S . -B build --trace-source=CMakeLists.txt
Als je --trace-expand
toevoegt, zullen de variabelen worden uitgebreid naar hun waarden.
Bouwen in debug modus
Voor single-configuratie generatoren, kun je je code bouwen met -DCMAKE_BUILD_TYPE=Debug
om debug vlaggen te krijgen. In multi-configuratie generatoren, zoals veel IDE’s, kunt u de configuratie kiezen in de IDE. Er zijn verschillende vlaggen voor deze modus (variabelen eindigend op _DEBUG
in tegenstelling tot _RELEASE
), evenals een generator expressie waarde CONFIG:Debug
of CONFIG:Release
.
Als je eenmaal een debug build hebt gemaakt, kun je een debugger, zoals gdb of lldb erop draaien.