Olá Habr!
O verão do lado de fora da janela voa para nós quase imperceptivelmente, porque dedicamos todos esses meses a trabalhar no novo lançamento 2019.2 do nosso ambiente de desenvolvimento de plataforma cruzada para C ++ - CLion. Conseguimos fazer muitas coisas: conduzir um Hackathon interno, experimentar novas idéias e trazer várias correções e novos recursos para um lançamento imediato. Mas as primeiras coisas primeiro.

Em resumo, nesta versão, nós:
- Continuamos aprimorando o suporte ao desenvolvimento de sistemas embarcados: novos recursos de depuração e periféricos de exibição apareceram.
- O depurador experimental para MSVC foi trazido para uma qualidade aceitável.
- Reescrevemos completamente a verificação de código em inclusões não utilizadas no clangd, adicionando a capacidade de configurar estratégias diferentes.
- Dicas implementadas para argumentos de chamada de função e lambdas para melhorar a legibilidade do código.
- Realizamos um Hackathon dentro da equipe para melhorar a produtividade, criamos várias novas abordagens e conseguimos implementar várias melhorias.
- Implementamos o destaque de sintaxe para mais de 20 idiomas, construímos um plug-in Shell Script e atualizamos o plug-in Rust.
Isso,
é claro,
não é tudo . Falaremos com mais detalhes abaixo, mas se você estiver pronto para experimentar agora, faça o download da versão em
nosso site . Como de costume, está disponível uma avaliação gratuita por 30 dias.
Novos recursos para desenvolvimento incorporado
No release anterior, por algum motivo, muitos pensaram que estávamos focados apenas nas placas STM32. É claro que este é um dos mercados mais interessantes e abrangentes em muitos estudos (incluindo o doméstico), mas agora estamos tentando resolver problemas mais gerais. Por exemplo, expandimos os recursos de depuração em várias placas do CLion.
Anteriormente, a única opção era a configuração do depurador OpenOCD - OpenOCD Download & Run. Agora apareceu outro - Servidor GDB incorporado. De fato, se a placa suportar a depuração por meio de um servidor GDB compatível, você poderá depurá-la através do CLion. A configuração abrange casos como OpenOCD, servidores ST-Link GDB, servidor Segger J-Link GDB, QEMU e muito mais.

É suficiente criar e configurar a configuração apropriada - especifique o caminho para o servidor GDB, os argumentos que você passa para ele, talvez algumas configurações mais avançadas. Agora execute a depuração nesta configuração, e você pode depurar no quadro diretamente do CLion!
Há uma limitação importante que agora afeta as duas configurações de depuração de sistemas incorporados - atualmente, ambas funcionam apenas com projetos no CMake. No futuro, planejamos adicionar a capacidade de executá-los para modelos de design personalizado (
CPP-16079 ).
Para as configurações existentes de depuração de sistemas incorporados (Embedded GDB Server e OpenOCD Download & Run), a nova versão agora tem a capacidade de exibir periféricos durante a depuração. Em geral, os periféricos são especificados para dispositivos da família ARM em
arquivos no formato
.svd . Agora, essas especificações podem ser carregadas no CLion e exibir os periféricos selecionados diretamente na janela do depurador:

Todos os periféricos ainda estão disponíveis no modo somente leitura, enquanto há uma pesquisa por nome, a capacidade de exibir valores em diferentes modos (hexadecimal, decimal, octal e binário). Você pode ler um pouco mais sobre isso em nosso
blog (em inglês).
Depurador experimental para MSVC
Você leu certo - na versão 2019.2, o CLion introduziu um depurador experimental para código compilado usando o MSVC! Agora vamos entender um pouco mais detalhadamente e em ordem.
Durante muito tempo no CLion, você pode usar não apenas as cadeias de ferramentas MinGW e Cygwin, mas também o Visual Studio ao desenvolver na plataforma Windows. Você especifica o caminho para o VS instalado no CLion e, a partir daí, usamos o compilador e os scripts MSVC para configurar o ambiente. Mas houve problemas com o depurador por um longo tempo. O fato é que o depurador que o Visual Studio em si usa é proprietário. Simplificando, em nenhum lugar, exceto nas ferramentas da Microsoft, ele pode ser usado sob licença. Existe uma tecnologia alternativa -
dbgeng.dll , na qual os depuradores de CDB e WinGDB são implementados. A primeira coisa que testamos foi ela. Mas parecia-nos que lidar com o número de falhas críticas e o baixo desempenho em binários com um grande número de arquivos PDB não é muito promissor (embora tenhamos tentado a princípio). E então descobriu-se que existe uma terceira opção - implementar um depurador no LLDB. Já havia conquistas, e tivemos apenas que continuar esse trabalho. O que fizemos! A propósito, colocamos todas as nossas alterações (exceto o suporte de visualizadores de dados nativos por enquanto) no assistente do LLVM.
Como habilitar? Como já escrevi, a oportunidade ainda é experimental. É muito cedo para chamar um depurador completo, possui muitas limitações e deficiências e o desempenho requer otimizações significativas. Esse recurso experimental é ativado na caixa de diálogo Manutenção (
Shift+Ctrl+Alt+/
no Linux / Windows,
⌥⇧⌘/
no macOS) | Recursos experimentais |
cidr.debugger.lldb.windows . Agora, um novo depurador está disponível para a cadeia de ferramentas do Visual Studio:

O depurador tem suporte inicial para visualizadores nativos, fornecidos com o estúdio e personalizados personalizados encontrados no projeto. Por enquanto, o recurso requer inclusão explícita nas configurações: Configurações | Compilação, Execução, Implantação | Exibições de dados do depurador | Habilite os renderizadores NatVis para LLDB. Em uma das primeiras atualizações, planejamos corrigir vários problemas críticos com visualizadores e, provavelmente, ativá-los por padrão.

Se você planeja tentar um novo depurador experimental, recomendamos que você se familiarize com a lista de limitações e problemas conhecidos em
nosso blog .
Outras melhorias no depurador
Além do novo depurador experimental, fizemos várias outras melhorias:
- No console GDB / LLDB interno, na janela do depurador no CLion, o preenchimento automático dos comandos do depurador agora funciona (use
Tab
ou Ctrl+Space
). - Agora, os pontos de interrupção de sequência são validados em tempo real e seu status é atualizado e exibido ao usuário na forma de um ícone correspondente. O tipo mais interessante é Inválido , que foi adicionado para identificar pontos de interrupção que não estão disponíveis no código executável atual ou para os quais não há símbolos de depuração (nesse caso, após carregá-los, o status do ponto de interrupção será atualizado automaticamente):

- Ao visualizar a memória no depurador (Memory View) na nova versão, tornou-se possível alternar para um endereço arbitrário (por endereço numérico ou nome / endereço da variável), além de apresentar a memória no formato ASCII:

Aprimoramentos do editor de código
Existem várias grandes melhorias nessa área. Primeiro, reescrevemos completamente a verificação do código
Não Utilizado e a ativamos por padrão. Anteriormente, ele também estava lá, mas fornecia um grande número de falsos positivos, então desativamos por padrão. Por que está melhorando? Reescrevemos completamente a verificação com base na segunda ferramenta adicional para análise de código, que, por sua vez, é baseada no Clangd. Portanto, essa é uma limitação clara - a nova versão funcionará apenas se o Clangd não estiver desativado para você (por padrão, está ativado). Mas agora, ao verificar inclusões não utilizadas, várias estratégias apareceram, entre as quais você pode escolher:

Por padrão,
Detectar não usado diretamente é usado , o que é essencialmente o mais próximo do conhecido princípio de
Incluir o Que Você Usa , ou seja, se as declarações do arquivo de cabeçalho não forem usadas diretamente nesse arquivo, esse arquivo de cabeçalho será marcado como não utilizado.
Nas configurações de inspeção (Configurações / Preferências | Editor | Inspeções | C / C ++ | Código não utilizado | Diretiva de inclusão não utilizada), você também pode optar por executar a verificação nos próprios arquivos de cabeçalho. É verdade que funcionará apenas nos arquivos de cabeçalho em que
#pragma ou protetores de cabeçalho estão presentes. Também é importante saber que, se houver erros de compilação no arquivo de origem, a verificação não mostrará arquivos não utilizados.
Desde a última versão, o CLion oferece suporte ao
ClangFormat como uma ferramenta alternativa de formatação de código, além da incorporada. Nesta versão, adicionamos um esquema JSON interno para arquivos de configuração no formato .clang. E, graças a isso, pudemos adicionar vários recursos que podem ser úteis para quem modificar os arquivos no formato .clang no CLion:
- O preenchimento automático apareceu para opções e seus valores.
- Na janela de preenchimento automático para opções, agora há uma descrição das opções.
- A janela da documentação da Documentação rápida (
Ctrl+Q
no Windows / Linux, F1
no macOS) mostra a documentação das opções e seus significados, com exemplos. - A validação de opções para valores válidos é adicionada.

Dicas para Argumentos
E se a função for escrita (talvez não por você) para que 3 números inteiros sejam passados para ela como argumentos? Como entender por chamada de função o que significam os valores transferidos? Obviamente, você pode ver a assinatura da função na janela de documentação, acessar a definição da função ou acessar as informações do parâmetro (Informações do parâmetro). E se você não fizer essas ações explícitas?
Na versão CLion 2019.2, apareceram dicas de ferramenta - ao chamar uma função, lambda, construtor, lista de inicialização ou ao usar uma macro, o CLion exibe os nomes dos parâmetros antes da passagem dos argumentos:

As dicas são mostradas nos casos em que é realmente difícil entender quais valores são passados para quais parâmetros, ou seja, se literais ou expressões com mais de um operando são usados como argumentos.
Mais detalhes na postagem do blog .
Desempenho
Obviamente, muitas vezes nos perguntam sobre melhorias de desempenho. Repito, para nós esta é a tarefa mais prioritária, mas acontece que não há muitas mudanças pontuais, e as globais levam mais tempo do que 1-2 ciclos de lançamento. Agora, existem várias grandes mudanças no trabalho. Basicamente, eles estão relacionados à maneira como o analisador no CLion interage com a arquitetura da plataforma (que nem sempre calcula que uma resolução longa, em C ++, oculta uma resolução longa de código).
Neste verão, a equipe e eu decidimos realizar um Hackathon interno para identificar os pontos mais vulneráveis na arquitetura e plataforma do CLion, experimentar novas idéias ousadas e testar algumas hipóteses antigas. Gostamos dos resultados. Se possível, planejamos trazer algumas novas idéias para o lançamento até 2019.
Mas a versão 2019.2 não foi deixada sem melhorias no desempenho:
- Nos livramos de muitas lentidões e congelamentos na refatoração da Renomeação no Local.
- Desempenho aprimorado de preenchimento automático para expressões qualificadas.
- No caso de trabalho remoto, reduzimos o número de operações de E / S, o que acelerou significativamente a coleta de informações sobre o compilador e, portanto, a velocidade de download do projeto CMake.
- E outras melhorias.
Não apenas C ++
Na plataforma IntelliJ no CLion 2019.2, muitas melhorias foram feitas para trabalhar com outros idiomas.
O destaque da sintaxe de mais de
20 idiomas agora
é fornecido pelas gramáticas do TextMate (uma lista completa de idiomas pode ser encontrada em Configurações / Preferências | Editor | Bundles do TextMate). Obviamente, se para esta linguagem houver suporte estendido no CLion (Python, JavaScript, HTML, Objective-C, SQL), ela será usada, mas para linguagens como Ruby, o realce mais simples pode ser útil:

Geralmente, em projetos C ++, há uma variedade de
scripts . O plug-in Shell Script agora está embutido no CLion. Ele fornece não apenas destaque de código, mas também preenchimento automático e renomeação de texto:
O plugin Rust recebeu muitas atualizações úteis. De uma nova ferramenta experimental de expansão de macro (Configurações / Preferências | Idiomas e estruturas | Ferrugem | Expandir macros declarativas) a
Duplicar fragmentos de código , várias novas correções rápidas e preenchimento automático no depurador em
Avaliar expressões . A propósito, é no CLion que o maior uso deste plugin está agora entre todos os IDEs do JetBrains!
Demo
Vídeo tradicional sobre os novos recursos do CLion 2019.2 (em inglês):
Isso é tudo de uma vez. Obrigado por ler até o fim! Perguntas, desejos, relatórios de bugs e apenas pensamentos expressos nos comentários! Como sempre, teremos o maior prazer em responder.
Sua equipe JetBrains CLionO impulso para desenvolver