Sortie de CLion 2019.2: support de dĂ©veloppement intĂ©grĂ©, dĂ©bogueur pour MSVC, recherche de fichiers d'en-tĂȘte inutilisĂ©s

Bonjour, Habr!

L'Ă©tĂ© hors de la fenĂȘtre s'annonce presque imperceptiblement, car nous avons consacrĂ© tous ces mois Ă  travailler sur la nouvelle version 2019.2 de notre environnement de dĂ©veloppement multiplateforme pour C ++ - CLion. Nous avons rĂ©ussi Ă  faire beaucoup de choses: mener un Hackathon interne, essayer de nouvelles idĂ©es et apporter un certain nombre de corrections et de nouvelles fonctionnalitĂ©s Ă  une version immĂ©diate. Mais tout d'abord.

CLion 2019.2 est sorti

En bref, dans cette version, nous:

  • Nous avons continuĂ© d'affiner la prise en charge du dĂ©veloppement de systĂšmes embarquĂ©s: de nouvelles capacitĂ©s de dĂ©bogage et de visualisation des pĂ©riphĂ©riques sont apparues.
  • Le dĂ©bogueur expĂ©rimental pour MSVC a Ă©tĂ© amenĂ© Ă  une qualitĂ© acceptable.
  • Nous avons complĂštement réécrit la vĂ©rification du code sur InutilisĂ©s inclut sur clangd, en ajoutant la possibilitĂ© de configurer diffĂ©rentes stratĂ©gies.
  • ImplĂ©mentation de conseils pour les arguments d'appel de fonction et les lambdas pour amĂ©liorer la lisibilitĂ© du code.
  • Nous avons menĂ© un Hackathon intra-Ă©quipe pour amĂ©liorer la productivitĂ©, trouvĂ© un tas de nouvelles approches et rĂ©ussi Ă  mettre en Ɠuvre plusieurs amĂ©liorations.
  • Nous avons implĂ©mentĂ© la coloration syntaxique pour plus de 20 langues, construit dans un plugin Shell Script et mis Ă  jour le plugin Rust.


Ce n'est bien sĂ»r pas tout . Nous parlerons plus en dĂ©tail ci-dessous, mais si vous ĂȘtes prĂȘt Ă  l'essayer maintenant, allez-y et tĂ©lĂ©chargez la version depuis notre site Web . Comme d'habitude, un essai gratuit de 30 jours est disponible.

Nouvelles fonctionnalités pour le développement embarqué


Dans la version précédente, pour une raison quelconque, beaucoup pensaient que nous nous concentrions uniquement sur les cartes STM32. Bien sûr, c'est l'un des marchés les plus intéressants et les plus étendus de nombreuses études (y compris notre marché intérieur), mais nous essayons maintenant de résoudre des problÚmes plus généraux. Par exemple, nous avons étendu les capacités de débogage sur différentes cartes de CLion.

Auparavant, la seule option était la configuration du débogueur OpenOCD - OpenOCD Download & Run. Maintenant, un autre est apparu - Embedded GDB Server. En fait, si la carte prend en charge le débogage via un serveur GDB compatible, vous pouvez le déboguer via CLion. La configuration couvre des cas tels que OpenOCD, les serveurs GDB ST-Link, le serveur GDB Segger J-Link, QEMU et plus encore.

Configuration embarquée

Il suffit de crĂ©er et de configurer la configuration appropriĂ©e - spĂ©cifiez le chemin d'accĂšs au serveur GDB, les arguments que vous lui passez, peut-ĂȘtre des paramĂštres plus avancĂ©s. Maintenant, exĂ©cutez le dĂ©bogage dans cette configuration et vous pouvez dĂ©boguer sur la carte directement depuis CLion!

Il existe une limitation importante qui affecte dĂ©sormais les deux configurations de dĂ©bogage des systĂšmes embarquĂ©s - les deux ne fonctionnent actuellement qu'avec des projets sur CMake. À l'avenir, nous prĂ©voyons d'ajouter la possibilitĂ© de les exĂ©cuter pour des modĂšles de conception personnalisĂ©s ( CPP-16079 ).

Pour les deux configurations de dĂ©bogage existantes des systĂšmes embarquĂ©s (serveur GDB intĂ©grĂ© et OpenOCD Download & Run), la nouvelle version a dĂ©sormais la possibilitĂ© d'afficher les pĂ©riphĂ©riques pendant le dĂ©bogage. En gĂ©nĂ©ral, les pĂ©riphĂ©riques sont spĂ©cifiĂ©s pour les appareils de la famille ARM au format .svd . Ces spĂ©cifications peuvent maintenant ĂȘtre chargĂ©es dans CLion et afficher les pĂ©riphĂ©riques sĂ©lectionnĂ©s directement dans la fenĂȘtre du dĂ©bogueur:

Périphériques

Tous les périphériques sont toujours disponibles en mode lecture seule, tandis qu'il existe une recherche par nom, la possibilité d'afficher les valeurs dans différents modes (hexadécimal, décimal, octal et binaire). Vous pouvez en lire un peu plus sur notre blog (en anglais).

Débogueur expérimental pour MSVC


Vous avez bien lu - dans la version 2019.2, CLion a introduit un débogueur expérimental pour le code compilé à l'aide de MSVC! Maintenant, comprenons un peu plus en détail et dans l'ordre.

Pendant longtemps dans CLion, vous pouvez utiliser non seulement la chaĂźne d'outils MinGW et Cygwin, mais Ă©galement Visual Studio lors du dĂ©veloppement sur la plate-forme Windows. Vous spĂ©cifiez le chemin vers le VS installĂ© dans CLion, et Ă  partir de lĂ , nous prenons le compilateur MSVC et les scripts pour configurer l'environnement. Mais il y a eu des problĂšmes avec le dĂ©bogueur pendant longtemps. Le fait est que le dĂ©bogueur que Visual Studio utilise lui-mĂȘme est propriĂ©taire. Autrement dit, nulle part, sauf les outils Microsoft, il ne peut ĂȘtre utilisĂ© sous licence. Il existe une technologie alternative - dbgeng.dll , sur laquelle les dĂ©bogueurs CDB et WinGDB sont implĂ©mentĂ©s. La premiĂšre chose que nous avons testĂ©e Ă©tait elle. Mais il nous a semblĂ© que gĂ©rer le nombre de plantages critiques et les mauvaises performances sur les binaires avec un grand nombre de fichiers PDB n'est pas trĂšs prometteur (bien que nous ayons essayĂ© au dĂ©but). Et puis il s'est avĂ©rĂ© qu'il existe une troisiĂšme option - pour implĂ©menter un dĂ©bogueur au-dessus de LLDB. Il y a dĂ©jĂ  eu des rĂ©alisations et nous n'avons eu qu'Ă  poursuivre ce travail. Ce que nous avons fait! Soit dit en passant, nous avons mis toutes nos modifications (Ă  l'exception de la prise en charge des visualiseurs de donnĂ©es natifs pour l'instant) dans l'assistant LLVM.

Comment activer? Comme je l'ai dĂ©jĂ  Ă©crit, l'opportunitĂ© est encore expĂ©rimentale. Il est trop tĂŽt pour appeler un dĂ©bogueur Ă  part entiĂšre, il prĂ©sente de nombreuses limitations et lacunes, et les performances nĂ©cessitent des optimisations importantes. Cette fonctionnalitĂ© expĂ©rimentale est activĂ©e dans la boĂźte de dialogue Maintenance ( Shift+Ctrl+Alt+/ sous Linux / Windows, ⌄⇧⌘/ sous macOS) | CaractĂ©ristiques expĂ©rimentales | cidr.debugger.lldb.windows . Maintenant, un nouveau dĂ©bogueur est disponible pour la chaĂźne d'outils Visual Studio:

ChaĂźne d'outils Msvc

Le débogueur prend en charge initialement les visualiseurs natifs, tous deux fournis avec le studio, et ceux personnalisés personnalisés trouvés dans le projet. Pour l'instant, la fonctionnalité nécessite une inclusion explicite dans les paramÚtres: ParamÚtres | Construction, exécution, déploiement | Vues des données du débogueur | Activez les rendus NatVis pour LLDB. Dans l'une des premiÚres mises à jour, nous prévoyons de résoudre plusieurs problÚmes critiques avec les visualiseurs, puis de les activer par défaut.

Support pour Natvis

Si vous prévoyez d'essayer un nouveau débogueur expérimental, nous vous recommandons de vous familiariser avec la liste des limitations et problÚmes connus sur notre blog .

Autres améliorations du débogueur


En plus du nouveau débogueur expérimental, nous avons apporté un certain nombre d'autres améliorations:
  • Dans la console GDB / LLDB intĂ©grĂ©e, dans la fenĂȘtre du dĂ©bogueur dans CLion, la saisie semi- automatique des commandes du dĂ©bogueur fonctionne dĂ©sormais (utilisez Tab ou Ctrl+Space ).
  • Les points d'arrĂȘt de chaĂźne sont dĂ©sormais validĂ©s Ă  la volĂ©e , et leur statut est mis Ă  jour et affichĂ© Ă  l'utilisateur sous la forme d'une icĂŽne correspondante. Le type le plus intĂ©ressant est Invalid , qui a Ă©tĂ© ajoutĂ© pour identifier les points d'arrĂȘt qui ne sont pas disponibles dans le code exĂ©cutable actuel ou pour lesquels il n'y a pas de symboles de dĂ©bogage (dans ce cas, aprĂšs les avoir chargĂ©s, l'Ă©tat du point d'arrĂȘt sera automatiquement mis Ă  jour):
    Points d'arrĂȘt de ligne
  • Lors de la visualisation de la mĂ©moire dans le dĂ©bogueur (Memory View) dans la nouvelle version, il est devenu possible de basculer vers une adresse arbitraire (par adresse numĂ©rique ou nom / adresse de variable), ainsi que de prĂ©senter la mĂ©moire au format ASCII:
    Affichage de la mémoire


Améliorations de l'éditeur de code


Il y a plusieurs grandes améliorations dans ce domaine. Tout d'abord, nous avons complÚtement réécrit la vérification du code inclus non utilisé et l'avons activé par défaut. Auparavant, il était également présent, mais il donnait un grand nombre de faux positifs, nous l'avons donc désactivé par défaut. Pourquoi ça va mieux? Nous avons complÚtement réécrit la vérification sur la base du deuxiÚme outil supplémentaire pour analyser le code, qui, à son tour, est basé sur Clangd. Il s'agit donc d'une limitation claire - la nouvelle version ne fonctionnera que si Clangd n'est pas désactivé pour vous (par défaut, il est activé). Mais maintenant, en vérifiant les inclus inutilisés, plusieurs stratégies sont apparues, parmi lesquelles vous pouvez choisir:
Inutilisé comprend
Par dĂ©faut, DĂ©tecter non directement utilisĂ© est utilisĂ© , ce qui est essentiellement le plus proche du principe bien connu d' inclure ce que vous utilisez , c'est-Ă -dire que si les dĂ©clarations du fichier d'en-tĂȘte ne sont pas utilisĂ©es directement dans ce fichier, un tel fichier d'en-tĂȘte est marquĂ© comme inutilisĂ©.

Dans les paramĂštres d'inspection (ParamĂštres / PrĂ©fĂ©rences | Éditeur | Inspections | C / C ++ | Code inutilisĂ© | Directive d'inclusion inutilisĂ©e), vous pouvez Ă©galement choisir d'exĂ©cuter la vĂ©rification dans les fichiers d'en-tĂȘte eux-mĂȘmes. Certes, cela ne fonctionnera que dans les fichiers d'en-tĂȘte oĂč #pragma ou des gardes d'en-tĂȘte sont prĂ©sents. Il est Ă©galement important de savoir que si des erreurs de compilation sont prĂ©sentes dans le fichier source, la vĂ©rification n'affichera pas les fichiers inutilisĂ©s.

Depuis la derniĂšre version, CLion prend en charge ClangFormat en tant qu'outil de formatage de code alternatif, en plus de l'outil intĂ©grĂ©. Dans cette version, nous avons ajoutĂ© un schĂ©ma JSON intĂ©grĂ© pour les fichiers de configuration au format .clang. Et grĂące Ă  cela, nous avons pu ajouter plusieurs fonctionnalitĂ©s qui pourraient ĂȘtre utiles Ă  ceux qui modifieront les fichiers au format .clang dans CLion:

  • La saisie semi-automatique est apparue pour les options et leurs valeurs.
  • Dans la fenĂȘtre de saisie semi-automatique des options, il y a maintenant une description des options.
  • La fenĂȘtre de documentation de la documentation rapide ( Ctrl+Q sous Windows / Linux, F1 sous macOS) affiche la documentation des options et leur signification, avec des exemples.
  • La validation des options pour les valeurs valides est ajoutĂ©e.


Code d'assistance Clangformat

Conseils pour les arguments


Que se passe-t-il si la fonction est Ă©crite (peut-ĂȘtre pas par vous) de sorte que 3 entiers lui soient passĂ©s comme arguments? Comment comprendre par un appel de fonction ce que signifient les valeurs transfĂ©rĂ©es? Bien sĂ»r, vous pouvez voir la signature de la fonction dans la fenĂȘtre de documentation, aller Ă  la dĂ©finition de la fonction ou appeler les informations de paramĂštre (Parameter Info). Et si vous ne faites pas ces actions explicites?

Dans la version CLion 2019.2, des info-bulles pour les arguments sont apparues - lors de l'appel d'une fonction, lambda, constructeur, liste d'initialisation ou lors de l'utilisation d'une macro, CLion affiche les noms des paramĂštres avant le passage des arguments: Conseils sur les paramĂštres
Des conseils sont affichĂ©s dans les cas oĂč il est vraiment difficile de comprendre quelles valeurs sont passĂ©es Ă  quels paramĂštres, Ă  savoir si des littĂ©raux ou des expressions avec plus d'un opĂ©rande sont utilisĂ©s comme arguments. Plus de dĂ©tails sur le blog .

Performances


Bien sûr, nous sommes souvent interrogés sur les améliorations de performances. Je le répÚte, pour nous, c'est la tùche la plus prioritaire, mais il s'avÚre qu'il n'y a pas beaucoup de changements ponctuels, et les changements globaux prennent plus de temps que 1-2 cycles de publication. Maintenant, il y a plusieurs grands changements dans le travail. Fondamentalement, ils sont liés à la façon dont l'analyseur dans CLion interagit avec l'architecture de la plate-forme (qui ne calcule pas toujours qu'un long code de résolution est caché derriÚre une action simple, dans le cas de C ++).

Cet été, l'équipe et moi avons décidé d'organiser un Hackathon interne pour identifier les points les plus vulnérables de l'architecture et de la plateforme CLion, essayer de nouvelles idées audacieuses et tester certaines vieilles hypothÚses. Nous avons aimé les résultats. Si possible, nous prévoyons d'apporter de nouvelles idées à la sortie d'ici 2019.3.

Mais la version 2019.2 n'est pas restée sans amélioration des performances:

  • Nous nous sommes dĂ©barrassĂ©s de nombreux ralentissements et blocages lors de la refactorisation de Renommer sur place.
  • AmĂ©lioration des performances de complĂ©tion automatique pour les expressions qualifiĂ©es.
  • Dans le cas du travail Ă  distance, nous avons rĂ©duit le nombre d'opĂ©rations d'E / S, ce qui a considĂ©rablement accĂ©lĂ©rĂ© la collecte d'informations sur le compilateur et, par consĂ©quent, la vitesse de tĂ©lĂ©chargement du projet CMake.
  • Et d'autres amĂ©liorations.

Pas seulement C ++


À partir de la plateforme IntelliJ dans CLion 2019.2, de nombreuses amĂ©liorations ont Ă©tĂ© apportĂ©es pour fonctionner avec d'autres langues.

La coloration syntaxique de plus de 20 langues est dĂ©sormais fournie par les grammaires TextMate (une liste complĂšte des langues se trouve dans ParamĂštres / PrĂ©fĂ©rences | Éditeur | Ensembles TextMate). Bien sĂ»r, si pour ce langage il existe un support Ă©tendu en CLion (Python, JavaScript, HTML, Objective-C, SQL), alors il sera utilisĂ©, mais pour des langages tels que Ruby, la mise en Ă©vidence la plus simple peut ĂȘtre utile:

Ruby dans CLion

Souvent, dans les projets C ++, il existe une variété de scripts . Le plugin Shell Script est maintenant intégré à CLion. Il fournit non seulement la mise en évidence du code, mais également la saisie semi-automatique et le changement de nom du texte:

Shell de script

Le plugin Rust a reçu de nombreuses mises Ă  jour utiles. D'un nouvel outil d'expansion de macros expĂ©rimental (ParamĂštres / PrĂ©fĂ©rences | Langues et cadres | Rust | DĂ©veloppez les macros dĂ©claratives) aux fragments de code en double , diverses nouvelles corrections rapides et l'auto-complĂ©tion dans le dĂ©bogueur dans Évaluer les expressions . Soit dit en passant, c'est dans CLion que la plus grande utilisation de ce plugin est maintenant parmi tous les IDE de JetBrains!

Démo


Vidéo traditionnelle sur les nouvelles fonctionnalités de CLion 2019.2 (en anglais):


C'est tout pour une fois. Merci d'avoir lu jusqu'au bout! Des questions, des souhaits, des rapports de bugs et seulement des pensées exprimées dans les commentaires! Comme toujours, nous serons heureux de répondre.

Votre équipe JetBrains CLion
La volonté de se développer

Source: https://habr.com/ru/post/fr461289/


All Articles