![parallel debugger demo screenshot 3 | Embarcadero RAD Studio Delphi C++Builder Blogs parallel debugger demo screenshot 3](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/12/parallel-debugger-demo-screenshot-3-7424382.png?resize=999%2C467&ssl=1)
Balisage de l’éditeur de code avancé, interface utilisateur de la pile d’appels et outils de débogage multithread – dans un nouveau plugin pour RAD Studio désormais disponible gratuitement.
Nous sommes très heureux d’annoncer une nouvelle extension IDE disponible aujourd’hui pour RAD Studio 10.4.1, créée par le même auteur que les plugins Bookmarks et Navigator populaires, Parnassus. Si vous lisez ceci, il est déjà disponible dans GetIt pour toute personne disposant d’un abonnement aux mises à jour: ouvrez simplement GetIt, accédez à la section Plugins IDE et installez le ‘Parallel Debugger’. Il nécessite Delphi ou C ++ Builder 10.4.1 ou plus récent.
Qu’Est-ce que c’est?
- Un outil de débogage d’applications multithread
- … Et cela aide également au débogage des applications traditionnelles à threads uniques!
Quelque chose pour tout le monde. Lisez la suite pour en savoir plus!
![editor before and after | Embarcadero RAD Studio Delphi C++Builder Blogs editor before and after 2](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/12/editor-before-and-after-7862533.gif?resize=300%2C42&ssl=1)
Une partie du nouveau balisage de l’éditeur, utile pour vous même si vous n’utilisez pas plusieurs threads dans votre application!
Table of Contents
Le problème
Si vous avez plusieurs threads dans votre application, vous avez probablement voulu déboguer l’interaction des threads. La vue d’un IDE traditionnel d’une application déboguée, bien qu’elle puisse répertorier plusieurs threads dans une vue Threads, consiste à traiter l’application comme si elle n’avait qu’un seul thread: vous ne verrez qu’une seule pile d’appels, et les contrôles run / pause / step sont pour l’ensemble du processus. Cela vous laisse, un développeur qui doit déboguer votre application, des questions telles que:
- Comment voir si plusieurs threads s’exécutent dans le même code à la fois?
- Comment voir ce que font tous mes fils à un moment donné?
- Comment parcourir une méthode dans un seul thread?
Ie, comment déboguer un thread sans que d’autres threads ne s’exécutent et exécutent du code que je ne veux pas qu’ils fassent, atteignant des points d’arrêt, etc.? - Combien de CPU chacun de mes threads utilise-t-il? Sont-ils efficaces?
Et peut-être d’autres questions ou souhaits, même le débogage dans un seul thread, comme:
- J’aimerais qu’il soit facile de voir toutes les méthodes de la pile d’appels en surbrillance dans mon code
- Je souhaite que je puisse facilement faire un point d’arrêt ne s’appliquer qu’à un thread particulier
- Je souhaite que le balisage de l’éditeur montrant la ligne de code actuelle soit un peu plus évident
- Je souhaite que, lors de la mise en pause du processus, cela ne m’amène pas à la vue CPU mais ne me montre que ma propre source
Chacun de ceux-ci est répondu par ce nouveau plugin.
Passons en revue ses fonctionnalités. Dans la section suivante, vous en apprendrez plus sur la vue Threads parallèles et les piles d’appels parallèles; par fil d’exécution et de progression; la vue Processus; nouveau balisage de l’éditeur, y compris les threads et les piles d’appels dans l’éditeur; définir l’affinité de thread d’un point d’arrêt; exécution courante en mouvement; le nouveau menu principal de Thread; et plus…
La vue des threads parallèles
Affichage> Fenêtres de débogage> Threads parallèles
Cette fenêtre répertorie tous les threads du processus, répertoriés horizontalement. Lorsque votre application est en cours d’exécution, si elle est sous Windows, chaque thread dispose d’un graphique affichant son utilisation du processeur.
Lorsque l’application est suspendue, chaque thread affiche sa pile d’appels.
- Chaque fil se voit attribuer une couleur unique , en commençant par un bleu moyen pour le fil principal de l’application. Cette couleur est utilisée comme un guide visuel pour identifier le fil partout.
- Les noms des threads sont affichés. Même si vous ne nommez pas votre thread principal, Parallel Debugger est suffisamment intelligent pour le détecter.
- Le fil actuel est en gras et est entouré d’une fine bordure de sa couleur. Double-cliquez sur le titre d’un fil (son nom) pour en faire le fil actuel.
- Les entrées de la pile d’appel sans code source – c’est-à-dire non déboguables sans utiliser la vue CPU – sont réduites par défaut. Vous pouvez les développer (ou les désactiver pour afficher une pile d’appels traditionnelle.)
Lors de la mise en pause du processus, le débogueur affichera toujours l’entrée de pile d’appels déboguable supérieure. Autrement dit, il peut ne pas afficher l’entrée supérieure de la pile d’appels comme le fait traditionnellement l’EDI, mais il affichera le code source du vôtre qui l’appelle. L’idée ici est de déboguer ce sur quoi vous avez le contrôle – affichez toujours la source.
Le bouton le plus à gauche de la barre d’outils de chaque thread interrompt l’ensemble du processus, faisant de ce thread le thread actuel. C’est « mettre en pause le processus dans ce fil ». Le bouton le plus à droite vous permet de modifier l’ordre d’affichage des fils de discussion, en les épinglant à gauche ou à côté d’un autre fil épinglé. Ceci est utile lorsque vous avez de nombreux fils dans votre application et que vous souhaitez conserver ceux qui vous intéressent regroupés. Si un thread épinglé a un nom, l’épinglage est persistant lors des redémarrages du processus: lorsque vous arrêtez et redémarrez votre application, les mêmes threads seront épinglés.
Exécution ou progression d’un seul fil
Les autres boutons de la barre d’outils sont destinés au contrôle de l’exécution des threads.
Les contrôles normaux d’exécution, de franchissement, d’entrée, etc. de l’EDI sont au niveau du processus; c’est-à-dire qu’ils exécuteront tout le processus, réveillant tous les threads, et vous espérez simplement que rien d’autre ne se produira jusqu’à ce que l’opération de progression soit terminée dans le thread que vous regardez. En pratique, beaucoup peuvent – exceptions, points d’arrêt, etc. – et bien sûr, parfois, vous voulez simplement vous assurer que d’autres threads ne s’exécutent pas pendant le débogage d’un seul thread.
Ces boutons de la barre d’outils vous permettent d’exécuter et de progresser à un niveau par thread. Vous pouvez:
- Exécuter uniquement ce thread, en gardant tous les autres threads en pause
- Gardez ce thread en pause, mais exécutez tous les autres threads
- Entrez dans une méthode, dans ce fil uniquement
- Passez au-dessus d’une ligne de code, dans ce fil uniquement. Cela permet uniquement à ce thread de s’exécuter et de progresser; aucun autre thread n’est autorisé à s’exécuter en même temps
- Exécuter jusqu’au retour de la méthode, pour ce thread uniquement
Pour les utiliser, assurez-vous que le fil de discussion qui vous intéresse est le fil actuel, en double-cliquant sur son titre ou son nom. Vous verrez qu’il dessine son titre en gras.
Chacun de ceux-ci a un raccourci clavier, ce qui signifie que vous pouvez utiliser le clavier pas seulement en cliquant sur un bouton avec la souris. Les raccourcis sont visibles dans le menu Thread qui contient des éléments de menu pour le thread actuel (voir ci-dessous).
Le contrôle d’exécution par thread est l’une des fonctionnalités les plus puissantes du débogueur parallèle.
Intégration de l’éditeur
Une tâche importante pour comprendre ce qui se passe dans une application multithread est de savoir quand plusieurs threads s’exécutent dans la même zone de code. Le débogueur parallèle rend cela clair en ajoutant un balisage dans l’éditeur pour la pile d’appels complète de chaque thread. Ceux-ci sont affichés via des «balises», de petits marqueurs colorés sur le côté droit de l’éditeur.
L’entrée supérieure de la pile d’appels – c’est-à-dire où le thread s’exécute « maintenant » – est marquée d’une balise de couleur unie, en utilisant la couleur du thread. Les autres entrées de la pile d’appels pour le même thread sont dans une version fanée de la couleur du fil (notez que le fil est toujours marqué d’un cercle plein dans la balise).
Cela vous permet de lire rapidement votre code et de savoir, « Thread X s’exécute quelque part dans cette ligne de code » et « Thread Y et Thread Z sont tous les deux dans la même méthode en ce moment ». Vous verrez même où se trouvent exactement les fils. Dans cette capture d’écran, le thread actuel est le bleu et un deuxième thread (rouge clair) est en cours d’exécution avec son point d’exécution actuel dans IsPrime (), mais l’appel à IsPrime a mis en évidence la ligne au-dessus du point d’exécution du thread actuel.
Exécution en mouvement
Avant d’installer le plugin, l’EDI affichait le point d’exécution du thread actuel avec une petite flèche bleue. Cela est maintenant remplacé par un grand chevron sur le côté gauche de l’éditeur de code.
Vous pouvez modifier l’emplacement du point d’exécution – où le thread commencera à s’exécuter la prochaine fois que vous appuierez sur Exécuter ou Étape – simplement en cliquant et en faisant glisser ce marqueur.
Affinité de thread de point d’arrêt
d’installer le plugin, les points d’arrêt ont été dessinés à l’aide d’un point rouge, mais avec le débogueur parallèle, les threads reçoivent des couleurs et le rouge signifie le fil rouge. Les points d’arrêt qui s’appliquent à tous les threads sont désormais dessinés sous la forme d’une roue multicolore.
Pour qu’un point d’arrêt s’applique uniquement à un thread spécifique, cliquez avec le bouton droit sur le point d’arrêt. Le nouveau menu Point d’arrêt vous permet de choisir un thread auquel le point d’arrêt s’appliquera.
Ici, ce point d’arrêt s’applique uniquement au thread vert.
La vue Process
Affichage> Déboguer Windows> Processus
Cette fenêtre affiche des informations sur le processus dans son ensemble. Il affiche l’utilisation du processeur au niveau du processus (à nouveau divisé en noyau et mode utilisateur), le type de processus (par exemple Wow64), et dispose de boutons exécuter / pause / réinitialisation, etc. Ceux-ci sont au niveau du processus, c’est-à-dire qu’ils fournissent les mêmes fonctionnalités que la propre barre d’outils d’exécution de l’EDI.
Vous pouvez également voir une liste de threads en cliquant sur le bouton en bas, comme moyen rapide de choisir le thread actuel (car le défilement horizontal dans la vue Threads peut prendre plus de temps si vous avez de nombreux threads.)
Le menu principal de Thread
L’EDI a maintenant un menu Thread, situé à droite du menu Exécuter. Cela fournit un menu pour la plupart des opérations directes que vous pouvez effectuer pour un thread. Il vous permet de définir le thread d’intérêt (c’est-à-dire le thread actuel si le processus est suspendu ou le thread que vous souhaitez devenir le thread actuel la prochaine fois que vous mettez en pause), et pour le thread actuel, des éléments de menu pour le contrôle de l’exécution du thread. Vous pouvez voir des raccourcis sur ces éléments de menu.
Il répertorie également chaque thread dans l’application, et pour chacun d’eux montre que vous exécutez le contrôle plus l’épinglage, en fait les mêmes fonctionnalités que dans la vue Parallel Threads.
Niveau de fonctionnalité
Enfin, l’élément de menu tout en haut contrôle le niveau de fonctionnalité du débogueur parallèle: ce qu’il fait lorsque votre application est en cours d’exécution. Le niveau le plus bas est juste pour suivre l’utilisation du processeur: utilisez ceci si vous voulez que le débogueur parallèle soit installé, mais que vous ne voulez pas l’utiliser activement pour cette application actuellement. Les deux niveaux suivants contrôlent la profondeur à laquelle le débogueur suit les piles d’appels de thread.
Utilisez ceci si vous avez des dizaines ou des centaines de threads. Dans cette situation, vous n’êtes probablement intéressé que par un sous-ensemble de threads. Définissez le niveau de fonctionnalité sur « Piles d’appels sélectionnées uniquement » et le débogueur parallèle suivra les piles d’appels pour le thread principal, les threads épinglés et le thread actuel uniquement par défaut. Vous pouvez toujours obtenir la pile d’appels pour n’importe quel thread en cliquant sur un bouton affiché sur la zone de pile d’appels dans la vue Threads.
Plateformes prises en charge
Le débogueur parallèle a toutes les fonctionnalités lors du débogage local des applications sur Windows.
Sur d’autres plates-formes, ou le débogage à distance, la fonctionnalité dépend de ce que le débogueur prend en charge. L’utilisation du processeur n’est prise en charge que pour les applications Windows locales (débogage non distant). La progression ou l’exécution par thread ne fonctionnera que sur les plates-formes prenant en charge le gel des threads. Il existe un problème connu pour C ++ Win64 où les piles d’appels ne peuvent pas être évaluées: cela sera corrigé dans une prochaine version de C ++ Builder.
Suivant une tradition de Parnassus commencée avec les signets, le débogueur parallèle résout en fait un bogue! ( RSP-29768 .)
En général: si vous utilisez Windows, le débogueur a toutes les fonctionnalités.
Le plugin prend en charge RAD Studio 10.4.1 (et plus récent, lorsque la version 10.4.2 sort.)
Obtenir le débogueur parallèle
Le débogueur parallèle est maintenant dans GetIt!
Grâce à Embarcadero, Parnassus met le débogueur gratuitement à la disposition de tout client RAD Studio avec un abonnement de mise à jour actif. Ouvrez GetIt, accédez à la catégorie Plugins IDE et cliquez sur Installer.
Parnassus et Embarcadero espèrent que vous trouverez cette extension comme un excellent ajout à votre IDE.
Sur une note personnelle, je tiens à remercier Embarcadero pour son intérêt pour le plugin et pour vouloir l’ajouter à GetIt, ainsi qu’à tous mes bêta-testeurs qui ont utilisé différentes versions de ce plugin de qualité lentement croissante depuis août. Merci beaucoup à tous!
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition