Możesz potrzebować debugować swoją kompilację CMake, lub debugować swój kod C++. Oba te zagadnienia są tutaj omówione.
Debugowanie CMake
Po pierwsze, spójrzmy na sposoby debugowania listy CMakeLists lub innego pliku CMake.
Wydrukowywanie zmiennych
Zaszczytna metoda wypisywania zmiennych wygląda w CMake tak:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
Jednakże wbudowany moduł czyni to jeszcze łatwiejszym:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
Jeśli chcesz wypisać właściwość, jest to o wiele, wiele przyjemniejsze! Zamiast uzyskiwać właściwości jeden po drugim każdego celu (lub innego elementu z właściwościami, takimi jak SOURCES
, DIRECTORIES
, TESTS
lub CACHE_ENTRIES
– właściwości globalne wydają się być pominięte z jakiegoś powodu), możesz po prostu wypisać je i uzyskać ich bezpośredni wydruk:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Śledzenie przebiegu
Czy chciałeś zobaczyć dokładnie co i kiedy dzieje się w twoim pliku CMake? Funkcja --trace-source="filename"
jest fantastyczna. Każda linia uruchomiona w pliku, który podasz, zostanie wyświetlona na ekranie, gdy zostanie uruchomiona, pozwalając ci śledzić dokładnie, co się dzieje. Istnieją również powiązane opcje, ale mają one tendencję do grzebania cię w danych wyjściowych.
Na przykład:
cmake -S . -B build --trace-source=CMakeLists.txt
Jeśli dodasz --trace-expand
, zmienne zostaną zinterpretowane do ich wartości.
Budowanie w trybie debugowania
Dla generatorów z pojedynczą konfiguracją, możesz zbudować swój kod z -DCMAKE_BUILD_TYPE=Debug
, aby uzyskać flagi debugowania. W generatorach z wieloma konfiguracjami, podobnie jak w wielu IDE, możesz wybrać konfigurację w IDE. Istnieją odrębne flagi dla tego trybu (zmienne kończące się na _DEBUG
w przeciwieństwie do _RELEASE
), jak również wartość wyrażenia generatora CONFIG:Debug
lub CONFIG:Release
.
Po wykonaniu kompilacji debugowania, możesz uruchomić na niej debugger, taki jak gdb lub lldb.