C++ Insights é uma ferramenta baseada em clang que faz uma transformação do seu código fonte no código fonte visto pelo compilador.
O objetivo é tornar visíveis as coisas, que normalmente e intencionalmente acontecem nos bastidores. É sobre a mágica que o compilador faz para que as coisas funcionem. Ou olhando através das classes de um compilador.
Por exemplo:
Suponhamos que você possui esse código:
#include <iostream>
int main(){
std::string hello {"Hello, World!"};
std::cout << hello << '\n';
return EXIT_SUCCESS;
}
Na verdade esse código é visto assim pelo seu compilador:
#include <iostream>
int main()
{
std::string hello = std::basic_string<char>{"Hello, World!", std::allocator<char>()};
std::operator<<(std::operator<<(std::cout, hello), '\n');
return 0;
}
O C++ Insights está disponível online, mas se você quiser construir e instalar no seu sistema, há alguns detalhes . Você precisará das seguintes ferramentas de construção:
Exemplo no Ubuntu:
sudo apt install clang++ lld ninja-build cmake
Depois é só clonar e construir com o seguinte comando:
git clone https://github.com/andreasfertig/cppinsights.git
mkdir build && cd build
cmake -G"Ninja" ../cppinsights
ninja
Se você não conseguir, tente assim:
Perceba que o linker e o compilador são informados via parâmetro para o CMake, se quiser ainda reforçar, rode antes do
cmake
os comando:export CXX=$(which clang++)
e para o linker:env LD=$(which lld)
.
git clone https://github.com/andreasfertig/cppinsights
cd cppinsights
mkdir build && cd build
cmake -G"Ninja" -DCMAKE_LINKER=$(which lld) -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_PREFIX_PATH=$(which clang++ | sed 's/\/clang++//g') ..
ninja
Você ainda pode tentar com o
make
:cmake -G "Unix Makefiles" ..
e mais os outros parâmetros acima.
Eu penei para compilar da forma: “somente com essas ferramentas”,… Enfim, boa sorte em compilar, você vai precisar!
Se você conseguiu compilar e instalar, a utilização é bem simples, exemplo para analisar um código:
insights <YOUR_CPP_FILE> -- -std=c++17
Se você NÃO conseguiu compilar e instalar, relaxe! Você pode usar online no endereço:
Tenho certeza que é bem mais fácil! 😃
Para mais informações acesse também o GitHub: