Du kan behöva felsöka din CMake-byggnad eller felsöka din C++-kod. Båda behandlas här.
CMake debugging
Först ska vi titta på sätt att debugga en CMakeLists eller annan CMake-fil.
Utskrift av variabler
Den gamla hederliga metoden med utskriftsanvisningar ser ut så här i CMake:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
En inbyggd modul gör dock detta ännu enklare:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
Om du vill skriva ut en egenskap är detta mycket, mycket trevligare! Istället för att få fram egenskaperna en efter en för varje mål (eller annat objekt med egenskaper, som SOURCES
, DIRECTORIES
, TESTS
eller CACHE_ENTRIES
– globala egenskaper verkar saknas av någon anledning), kan du helt enkelt lista dem och få dem utskrivna direkt:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Spårning av en körning
Har du velat titta exakt på vad som händer i din CMake-fil, och när? Funktionen --trace-source="filename"
är fantastisk. Varje rad som körs i filen som du anger kommer att ekas till skärmen när den körs, så att du kan följa exakt vad som händer. Det finns relaterade alternativ också, men de tenderar att begrava dig i utdata.
Till exempel:
cmake -S . -B build --trace-source=CMakeLists.txt
Om du lägger till --trace-expand
kommer variablerna att expanderas till sina värden.
Bygga i felsökningsläge
För generatorer med en enda konfiguration kan du bygga koden med -DCMAKE_BUILD_TYPE=Debug
för att få felsökningsflaggor. I generatorer med flera konfigurationer, som många IDE, kan du välja konfigurationen i IDE. Det finns tydliga flaggor för detta läge (variabler som slutar på _DEBUG
i motsats till _RELEASE
), samt ett generatoruttrycksvärde CONFIG:Debug
eller CONFIG:Release
.
När du har gjort en felsökningsbyggnad kan du köra en felsökare, t.ex. gdb eller lldb på den.