Pode ser necessário depurar o seu CMake build, ou depurar o seu código C++. Ambos são cobertos aqui.
CMake debugging
Primeiro, vamos ver maneiras de depurar uma CMakeLists ou outro arquivo CMake.
Variáveis de impressão
O método de impressão de declarações honradas de tempo se parece com isto em CMake:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
No entanto, um módulo incorporado torna isto ainda mais fácil:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
Se você quiser imprimir uma propriedade, isto é muito, muito mais agradável! Em vez de obter as propriedades um por um de cada alvo (ou outro item com propriedades, como SOURCES, DIRECTORIES, TESTS, ou CACHE_ENTRIES – propriedades globais parecem estar faltando por alguma razão), você pode simplesmente listá-las e obtê-las impressas diretamente:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Traçando uma execução
Deixar que você queria ver exatamente o que acontece no seu arquivo CMake, e quando? A funcionalidade --trace-source="filename" é fantástica. Cada linha executada no arquivo que você dá será ecoada para a tela quando ela for executada, permitindo que você siga exatamente o que está acontecendo. Existem opções relacionadas também, mas elas tendem a enterrá-lo no output.
Por exemplo:
cmake -S . -B build --trace-source=CMakeLists.txt
Se você adicionar --trace-expand, as variáveis serão expandidas em seus valores.
Building in debug mode
Para geradores de configuração única, você pode construir seu código com -DCMAKE_BUILD_TYPE=Debug para obter flags de debugging. Em geradores de multiconfiguração, como muitos IDEs, você pode escolher a configuração no IDE. Existem flags distintos para este modo (variáveis terminando em _DEBUG em oposição a _RELEASE), assim como um valor de expressão do gerador CONFIG:Debug ou CONFIG:Release.
Após você fazer uma compilação de depuração, você pode executar um depurador, como gdb ou lldb nele.