Peek et Poke

| André | traducteur : Cédric Bonnier | Qt Labs | gbdivers |

Dans ce premier article sur l'intégration du débogage dans Qt Creator, l'auteur présente comment celui-ci prend en charge l'affichage de structure abstraite comme QHash, pour l'afficher sous une forme proche de ce que les développeurs conçoit une QHash.

Cet article est une traduction autorisée de Peek and Poke, par André.

N'hésitez pas à commenter cet article !
Commentez

- Titre : Peek et Poke

- Auteurs : André, traducteur : Cédric Bonnier, Qt Labs, gbdivers

- Parution : 20 octobre 2010

- Mise à jour : 16 mars 2011

- Licence : Copyright ® 2010 André. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. L'article original

- II. Introduction

- IX. Conclusion

I - L'article original

Qt Labs est un site géré par les développeurs de Qt. Ils y publient des projets, des idées propres et des composants afin d'obtenir les retours d'informations sur les API, le code et les fonctionnalités ou simplement pour partager avec nous ce qui les intéressent. Le code que vous y trouverez peut fonctionner tel quel mais c'est sans aucune garantie ni support. Voir les conditions d'utilisation pour plus d'informations.

Nokia, Qt, Qt Labs et leurs logos sont des marques déposées de Nokia Corporation en Finlande et/ou dans les autres pays. Les autres marques déposées sont détenues par leurs propriétaires respectifs.

Cet article est la traduction de l'article Peek and Poke, par André paru dans Qt Labs.

II - Introduction

Rappelez-vous les jours où tous les outils à votre disposition ressemblaient à un interpréteur Basic avec 30 commandes, les plus utilisables étant PEEK, POKE et PRINT ? Oui, cela fait un moment déjà...

Pourtant, il y a quelques mois, je me suis retrouvé à devoir refaire beaucoup de débogage "à la printf". Même avec un support basique d'EDI qui affiche bien les QString et les QByteArray, creuser dans des structures plus complexes n'était vraiment pas plaisant. Une des raisons pour cela était certainement que les humains aiment penser un QHash à un niveau d'abstraction plus élevé, d'une manière assez différente de l'implémentation actuelle et c'est seulement l'implémentation bas niveau qu'un débogueur voit habituellement.

Une solution consiste à combler l'écart entre le bas niveau (pointeurs, unions anonymes...) et le haut niveau (un groupe de clés avec les valeurs associées) en apparence. Cela est réalisé en demandant au débogueur le type d'un objet uniquement et, ensuite, au lieu de demander les données bas niveau, lui dire quelle partie de la mémoire de l'application est une clé de hachage et quelle partie est la valeur correspondante. Cette information est ensuite transmise à la vue "Variables locales et observateurs" de Qt Creator.

Ci-dessous, le résultat de quelques conteneurs imbriqués et deux QObject avec une relation parent-enfant :

Pour ce dernier, une approche plus "traditionnelle" d'affichage bas niveau aurait produit :

L'affichage bas niveau d'un QHash est cependant moins impressionnant. Bien sûr, Qt Creator peut aisément changer de vue mais cela est rarement nécessaire.

Pour la commodité de l'audience la moins Qt-centrée, des affichages semblables ont été ajoutés pour quelques conteneurs largement utilisés de la bibliothèque standard C++, en voici la preuve :

L'affichage des types mentionnés ci-dessus (et quelques autres) fonctionne déjà avec Qt Creator 1.1 d'avril sur Linux, Windows et Mac. La seule chose nécessaire est une version pas trop ancienne du débogueur GNU. Gdb version 6.8 convient parfaitement et est largement répandue. Sur Mac, le gdb d'Apple fera l'affaire.

Le temps s'écoulant, le travail continue lui aussi. Qt Creator 1.2 sera capable d'afficher QAbstractItem, QAbstractItemModel, QByteArray, QDateTime, QDir, QFile, QFileInfo, QHash, QImage, QImageData, QLinkedList, QList, QLocale, QMap, QModelIndex, QMultiMap, QObject, QSet, QSharedPointer, QString, QStringList, QTextCodec, QVariant, QVector, QWeakPointer, std::list, std::map, std::set, std::string, std::vector, std::wstring ainsi que quelques types d'aide (QMapData et autres). Si quelque chose vous manque désespérément, dites-le moi.

Dernier point mais non des moindres, une nouvelle spécialement pour les gens du côté Windows du monde : à partir de Creator 1.2, le frontend du débogueur supportera aussi le débogueur de Microsoft, avec le même affichage convivial des données complexes.

IX - Conclusion

Au nom de toute l'équipe Qt, j'aimerais adresser le plus grand remerciement à Nokia pour nous avoir autorisé la traduction de cet article !

Merci à ram-0000 pour sa relecture et ses conseils.