Sur cette page

Débogage des applications QML

Lorsque vous développez une application avec QML, il existe de nombreuses façons de déboguer les problèmes éventuels que vous pouvez rencontrer. Les sections ci-dessous décrivent les outils de débogage disponibles et la manière de les utiliser.

Console API

FonctionDescription de l'outil
JournalUtilisez console.log, console.debug, console.info, console.warn ou console.error pour imprimer des informations de débogage sur la console.

Par exemple :

function f(a, b) {
  console.log("a is ", a, "b is ", b);
}

La sortie est générée à l'aide des méthodes qCDebug, qCWarning, ou qCCritical en C++, avec une catégorie qml ou js, selon le type de fichier qui effectue la journalisation.

Voir aussi Techniques de débogage.

Assertconsole.assert teste qu'une expression est vraie. Si ce n'est pas le cas, il écrit un message facultatif sur la console et affiche la trace de la pile.

Par exemple :

function f() {
  var x = 12
  console.assert(x == 12, "This will pass");
  console.assert(x > 12, "This will fail");
}
Timerconsole.time et console.timeEnd enregistrent le temps (en millisecondes) passé entre les appels. Les deux prennent un argument de type chaîne de caractères qui identifie la mesure.

Par exemple :

function f() {
    console.time("wholeFunction");
    console.time("firstPart");
    // first part
    console.timeEnd("firstPart");
    // second part
    console.timeEnd("wholeFunction");
}
Traceconsole.trace imprime la trace de la pile de l'exécution du JavaScript à l'endroit où il a été appelé. Ces informations contiennent le nom de la fonction, le nom du fichier, le numéro de ligne et le numéro de colonne. La trace de la pile est limitée aux 10 dernières images de la pile.
Compterconsole.count affiche le nombre de fois qu'un morceau de code particulier a été exécuté, ainsi qu'un message.

Par exemple :

function f() {
  console.count("f called");
}

L'exemple de code ci-dessus affiche f called: 1, f called: 2... chaque fois que f() est exécuté.

Profilconsole.profile active les profileurs QML et JavaScript. Les appels imbriqués ne sont pas pris en charge et un avertissement est affiché sur la console.
ProfileEndconsole.profileEnd désactive les profileurs QML et JavaScript. L'appel à cette fonction sans appel préalable à console.profile affiche un avertissement sur la console. Un client de profilage doit être attaché avant cet appel pour recevoir et stocker les données de profilage.

Par exemple, un client de profilage doit être attaché avant cet appel pour recevoir et stocker les données de profilage :

function f() {
    console.profile();
    //Call some function that needs to be profiled.
    //Ensure that a client is attached before ending
    //the profiling session.
    console.profileEnd();
}
Exceptionconsole.exception imprime un message d'erreur. Il fonctionne comme console.error mais nécessite au moins un argument et imprime en outre une trace de la pile de l'exécution JavaScript au moment où il est appelé.

Il est également possible de passer une adresse logging category comme premier argument à l'une de ces fonctions console. Voir LoggingCategory pour plus de détails.

Débogage des importations de modules

Définissez la variable d'environnement QML_IMPORT_TRACE pour activer la sortie de débogage des mécanismes de chargement des importations de QML.

Par exemple, pour un fichier QML simple comme celui-ci :

import QtQuick

Rectangle { width: 100; height: 100 }

Si vous définissez QML_IMPORT_TRACE=1 avant d'exécuter l'outilQML Runtime ou votre application QML C++, vous obtiendrez une sortie similaire à celle-ci :

QQmlImportDatabase::addImportPath "/qt-sdk/imports"
QQmlImportDatabase::addImportPath "/qt-sdk/bin/QMLViewer.app/Contents/MacOS"
QQmlImportDatabase::addToImport 0x106237370 "." -1.-1 File as ""
QQmlImportDatabase::addToImport 0x106237370 "Qt" 4.7 Library as ""
QQmlImportDatabase::resolveType "Rectangle" = "QDeclarativeRectangle"

Infrastructure de débogage QML

Le module Qt Qml fournit des services de débogage, d'inspection et de profilage des applications via un port TCP ou une socket locale.

Remarque : Les plugins qmltooling nécessaires au débogage et au profilage des applications QML sur les périphériques sont automatiquement installés lors de l'installation de Qt. Ils doivent être déployés sur les périphériques pour que le débogage et le profilage fonctionnent.

Activation de l'infrastructure

Lorsque vous compilez votre application, vous devez explicitement activer l'infrastructure de débogage. Si vous utilisez qmake, vous pouvez ajouter les paramètres de configuration CONFIG+=qml_debug au fichier .pro du projet.

Si vous utilisez un autre système de compilation, vous pouvez passer la définition QT_QML_DEBUG au compilateur :

Remarque : l'activation de l'infrastructure de débogage peut compromettre l'intégrité de votre application et de votre système, c'est pourquoi vous ne devez l'activer que dans un environnement contrôlé. Lorsque l'infrastructure est activée, l'application affiche l'avertissement suivant :
QML debugging is enabled. Only use this in a safe environment.

Démarrage des applications

Pour activer le débogage - dès le départ ou pour attacher un débogueur ultérieurement - démarrez l'application avec les arguments suivants :

-qmljsdebugger=port:<port_from>[,port_to][,host:<ip address>][,block][,file:<local socket>][,services:<comma-separated list of services to enable>]

Où :

  • le paramètre obligatoire port_from spécifie soit le port de débogage, soit le port de départ d'une série de ports lorsque port_to est spécifié
  • l'option ip address spécifie l'adresse IP de l'hôte sur lequel l'application s'exécute
  • l'option block empêche l'application de fonctionner jusqu'à ce que le client de débogage se connecte au serveur
  • l'option file spécifie le socket local.
  • l'option services spécifie les services à activer ; la valeur par défaut est tous ceux qui sont trouvés. Notez que le service v4 debug désactive le JIT.

Une fois que l'application a démarré avec succès, elle affiche le message suivant :

QML Debugger: Waiting for connection on port <port_number>

ou

QML Debugger: Connecting to socket at <file>

Connexion aux applications

Lorsque l'application est en cours d'exécution, un IDE ou un outil qui implémente le protocole binaire peut se connecter au port ouvert.

Débogage avec Qt Creator

Qt Creator utilise l'infrastructure de débogage pour déboguer, inspecter et profiler les applications QML sur le bureau ainsi que sur les périphériques distants. Qt Creator fournit des clients intégrés pour déboguer JavaScript, inspecter l'arbre des objets et profiler les activités d'un moteur QML. Pour plus d'informations, voir Qt Creator: Debugging Qt Quick Projects.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.