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.