Configuration du moteur JavaScript

L'exécution du code JavaScript peut être influencée par certaines variables d'environnement, notamment :

Variable d'environnementDescription
QV4_JIT_CALL_THRESHOLDLe moteur JavaScript intègre un compilateur Just-In-Time (JIT). Le JIT compile les fonctions JavaScript fréquemment exécutées en code machine afin d'accélérer leur exécution. Cette variable d'environnement détermine la fréquence à laquelle une fonction doit être exécutée pour être prise en compte par la compilation JIT. La valeur par défaut est 3 fois.
QV4_FORCE_INTERPRETERLa définition de cette variable d’environnement fait passer toutes les fonctions et expressions par l’interpréteur. Le JIT n’est jamais utilisé, quelle que soit la fréquence d’appel d’une fonction ou d’une expression. Les fonctions et expressions peuvent toujours être compilées à l’avance à l’aide de qmlcachegen ou qmlsc, mais seul le bytecode généré est utilisé lors de l’exécution. Tout code C++ généré et le code machine qui en résulte sont ignorés.
QV4_FAIL_ON_INVALID_AOTLe code QML compilé en C++ est validé lors de l’exécution. Si cette validation échoue, par défaut, le code est alors interprété au lieu d’être exécuté en tant que code natif. Lorsque cette variable d’environnement est définie, un échec de validation provoque à la place l’arrêt du programme. Cela peut être utile pour s’assurer que tout le code pouvant s’exécuter en tant que code natif le fasse effectivement.
QV4_SKIP_AOT_VALIDATIONCette variable d’environnement désactive la validation à l’exécution du code C++ généré pour le code QML compilé. Cela peut être utilisé pour éviter la surcharge liée à la validation elle-même. Notez que cela ne fait que désactiver la validation. Cela n’empêchera pas qmlcachegen de générer le code de validation lui-même. Pour cela, utilisez l’option ` NO_GENERATE_AOT_VALIDATION ` de `qt_add_qml_module`.
QV4_JS_MAX_STACK_SIZELe moteur JavaScript réserve une zone mémoire spécifique servant de pile pour l’exécution du JavaScript. Cette pile est distincte de la pile C++. En règle générale, cette zone a une taille de 4 Mo. Si cette variable d’environnement contient un nombre, le moteur JavaScript l’interprète comme la taille, en octets, de la zone mémoire à allouer pour la pile JavaScript.
QV4_GC_MAX_STACK_SIZEEn plus de la pile JavaScript standard, le moteur JavaScript gère une autre pile destinée au ramasse-miettes, qui occupe généralement 2 Mo de mémoire. Si le ramasse-miettes doit gérer un nombre excessif d’objets simultanément, cette pile risque d’être saturée. Si elle contient un nombre, cette variable d’environnement est interprétée comme la taille, en octets, de la zone de mémoire qui sera allouée pour servir de pile au ramasse-miettes.
QV4_STACK_SOFT_LIMITLorsque cette variable d’environnement est définie, le moteur JavaScript lève une exception « RangeError : taille maximale de la pile d’appels dépassée » dès que l’utilisation de la pile d’appels atteint la limite souple définie. Si la variable n’est pas définie, le moteur utilise par défaut les limites détectées à l’exécution ou celles prédéfinies par Qt, selon le système d’exploitation.
QV4_CRASH_ON_STACKOVERFLOWEn général, le moteur JavaScript tente de détecter les débordements de pile C++ causés par un code JavaScript excessivement récursif, et génère une erreur non fatale. Il existe des contrôles de récursivité distincts pour la compilation et l’exécution du JavaScript. Un débordement de pile lors de la compilation du JavaScript indique que le code contient des objets et des fonctions profondément imbriqués. Un débordement de pile lors de l’exécution indique que le code donne lieu à un programme profondément récursif. La vérification de ce phénomène n’est que indirectement liée à la taille de la pile JavaScript mentionnée ci-dessus, car chaque appel de fonction JavaScript consomme de l’espace sur les deux piles : celle du C++ et celle de JavaScript. Le code qui détecte une récursivité excessive est nécessairement prudent, car la taille de pile disponible dépend de nombreux facteurs et peut souvent être personnalisée par l’utilisateur. Lorsque cette variable d’environnement est définie, le moteur JavaScript ne vérifie pas les débordements de pile lors de la compilation ou de l’exécution du code JavaScript et ne génère pas d’exceptions à cet égard. Au lieu de cela, lorsque la pile déborde, le programme tente un accès mémoire non valide. Cela entraîne très probablement l’arrêt du programme. En contrepartie, le programme peut alors utiliser tout l’espace de pile que le système d’exploitation est en mesure de fournir.

Avertissement : un codemalveillant pourrait ainsi contourner l’arrêt du programme et accéder à des emplacements mémoire inattendus.

QV4_MAX_CALL_DEPTHLes débordements de pile lors de l'exécution (par opposition à la compilation) de JavaScript sont évités en contrôlant la profondeur d'appel : le nombre d'appels de fonctions imbriqués. Par défaut, une exception est générée si la profondeur d'appel dépasse un nombre maximal ajusté en fonction de la taille de pile par défaut de la plateforme. Si la variable d'environnement QV4_MAX_CALL_DEPTH contient un nombre, celui-ci est utilisé comme profondeur d'appel maximale. Attention : la limite de récursivité lors de la compilation de JavaScript n’est pas affectée. La profondeur d’appel maximale par défaut est de 1 234 sur la plupart des plateformes. Sur QNX, elle est de 640, car la taille de pile par défaut est plus petite sur QNX que sur la plupart des plateformes.

QV4_GC_TIMELIMIT

Cette valeur sert à indiquer au moteur le temps qu’il doit consacrer à chaque étape incrémentielle du ramasse-miettes. Il peut s’agir soit d’un nombre positif, spécifiant la limite de temps en millisecondes, soit de 0. Si la valeur est 0, le ramasse-miettes devient non incrémentiel.
QV4_MM_AGGRESSIVE_GCLa définition de cette variable d’environnement lance le ramasse-miettes avant chaque allocation de mémoire. Cette opération est très coûteuse en temps d’exécution, mais elle permet de détecter rapidement de nombreuses erreurs de gestion de la mémoire, par exemple la suppression manuelle d’un objet appartenant au moteur QML depuis du code C++.
QV4_MM_CROSS_VALIDATE_INCREMENTAL_GCLa définition de cette variable d’environnement déclenche des étapes de débogage supplémentaires afin d’identifier les cas où le ramasse-miettes incrémental présente un comportement anormal, en comparant ce dernier à celui du ramasse-miettes non incrémental.
QV4_PROFILE_WRITE_PERF_MAPSous Linux, l’utilitaire ` perf ` peut être utilisé pour profiler des programmes. Pour analyser les fonctions JavaScript compilées par JIT, il a besoin de connaître leurs noms et leurs emplacements en mémoire. Pour fournir ces informations, il existe une convention consistant à créer un fichier spécial nommé ` perf-<pid>.map ` dans le répertoire `/tmp`, que `perf` lit ensuite. Cette variable d’environnement, si elle est définie, force le JIT à générer ce fichier.
QV4_SHOW_BYTECODEAffiche sur la console le bytecode IR généré par Qt. Doit être combiné avec l’option ` QML_DISABLE_DISK_CACHE `, sinon le bytecode déjà mis en cache ne s’affichera pas.
QV4_DUMP_BASIC_BLOCKSAffiche les blocs de base de chaque fonction compilée à l’avance. Les détails de ces blocs sont affichés sur la console. De plus, des graphiques de flux de contrôle contenant le bytecode de chaque bloc sont générés au format DOT pour chaque fonction compilée. La valeur de ` QV4_DUMP_BASIC_BLOCKS ` est utilisée comme chemin d’accès au dossier dans lequel les fichiers DOT doivent être générés. Si le chemin est l’une des valeurs suivantes : [« - », « 1 », « true »] ou si les fichiers ne peuvent pas être ouverts, les graphiques sont alors affichés sur la sortie standard (stdout).
QV4_VALIDATE_BASIC_BLOCKSEffectue des vérifications sur les blocs de base d’une fonction précompilée afin de valider sa structure et sa cohérence. Si la validation échoue, un message d’erreur s’affiche sur la console.

Le cache disque QML accepte d’autres variables d’environnement permettant d’affiner son comportement. En particulier, ` QML_DISABLE_DISK_CACHE ` peut s’avérer utile pour le débogage.

© 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.