Testes, Depuração e Ferramentas de Build¶
Uma toolchain C++ gerencia opções, dependências, linking, testes e plataformas. Torne requisitos específicos por alvo e reproduzíveis.
Alvo CMake¶
cmake_minimum_required(VERSION 3.25)
project(cpp_notes LANGUAGES CXX)
add_executable(cpp_notes main.cpp)
target_compile_features(cpp_notes PRIVATE cxx_std_20)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
target_compile_options(cpp_notes PRIVATE -Wall -Wextra -Wpedantic -Werror)
elseif(MSVC)
target_compile_options(cpp_notes PRIVATE /W4 /WX)
endif()
Prefira propriedades de alvo a flags globais. CMakeLists.txt descreve o build,
mas não garante diagnósticos ou opções idênticos entre compiladores.
Níveis de teste¶
- unitários exercitam contrato pequeno;
- propriedades geram entradas e verificam invariantes;
- integração exercita limites reais, ABI e linking;
- builds com sanitizers detectam classes de defeitos;
- sistema executa o artefato completo.
Para ordenação, verifique ordem, permutação, vazio, singleton, duplicatas, extremos e oráculo. Consulte técnicas de teste.
Diagnósticos¶
Ative warnings fortes e entenda supressões. Compiladores encontram problemas distintos; usar mais de um amplia cobertura. Warnings não substituem correção ou testes.
Sanitizers¶
AddressSanitizer detecta muitos erros de memória; UndefinedBehaviorSanitizer, operações indefinidas selecionadas; ThreadSanitizer, muitas corridas. Têm overhead e cobertura incompleta.
Análise estática e formatação¶
Analisadores examinam caminhos sem executar. Formatters removem debate de estilo, não melhoram arquitetura. Revise correções geradas.
Depuração e profiling¶
Compile com símbolos e use debugger para fluxo/estado; profiler para desempenho. O código-fonte pode ocultar inlining, alocação, cache, contenção e syscalls. Siga o fluxo de investigação.
Integração contínua¶
Compile limpo, teste e execute sanitizers/análise quando prático. Registre versões e modo da linguagem. Não compare desempenho de builds debug e otimizados como equivalentes.