Configuration du moteur JavaScript

L'exécution du code JavaScript peut être influencée par quelques variables d'environnement, en particulier :

Variable d'environnementDescription de la variable d'environnement
QV4_JIT_CALL_THRESHOLDLe moteur JavaScript contient un compilateur Just-In-Time (JIT). Le JIT compile les fonctions JavaScript fréquemment exécutées en code machine afin qu'elles s'exécutent plus rapidement. Cette variable d'environnement détermine le nombre de fois qu'une fonction doit être exécutée pour être prise en compte dans la compilation JIT. La valeur par défaut est de 3 fois.
QV4_FORCE_INTERPRETEREn définissant cette variable d'environnement, toutes les fonctions et expressions sont exécutées 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 les expressions peuvent toujours être compilées à l'avance à l'aide de qmlcachegen ou de qmlsc, mais seul le code généré est utilisé au moment de l'exécution. Tout code C++ généré et le code machine qui en résulte sont ignorés.
QV4_JS_MAX_STACK_SIZELe moteur JavaScript réserve une zone de mémoire spéciale sous la forme d'une pile pour l'exécution de JavaScript. Cette pile est distincte de la pile C++. En général, 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 de la zone de mémoire, en octets, à allouer en tant que pile JavaScript.
QV4_GC_MAX_STACK_SIZEEn plus de la pile JavaScript normale, le moteur JavaScript conserve une autre pile pour le ramasse-miettes, qui occupe généralement 2 Mo de mémoire. Si le ramasse-miettes doit gérer un nombre excessif d'objets en même temps, cette pile risque de déborder. 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 comme pile pour le ramasse-miettes.
QV4_STACK_SOFT_LIMITLorsque cette variable d'environnement est définie, le moteur JavaScript lance une exception "RangeError : Maximum call stack size exceeded" lorsque l'utilisation de la pile d'appels atteint la limite définie. Si la variable n'est pas définie, le moteur utilise par défaut les limites détectées lors de l'exécution ou les limites prédéfinies par Qt en fonction du système d'exploitation.
QV4_CRASH_ON_STACKOVERFLOWEn général, le moteur JavaScript essaie d'attraper les dépassements de pile C++ causés par un code JavaScript excessivement récursif, et génère une condition d'erreur non fatale. Il existe des contrôles de récursivité distincts pour la compilation de JavaScript et l'exécution de JavaScript. Un dépassement de pile lors de la compilation de JavaScript indique que le code contient des objets et des fonctions profondément imbriqués. Un débordement de la pile lors de l'exécution indique que le code aboutit à un programme profondément récursif. Cette vérification n'est qu'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 piles C++ et JavaScript. Le code qui vérifie la récursivité excessive est nécessairement conservateur, car la taille de la 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épassements de pile lors de la compilation ou de l'exécution de JavaScript et ne génère pas d'exceptions à cet égard. Au lieu de cela, lorsque la pile déborde, le programme tente d'accéder à une mémoire non valide. Il est fort probable que cela mette fin au programme. En retour, le programme utilise tout l'espace de la pile que le système d'exploitation peut fournir.

Attention : un code malveillant peut être en mesure d'échapper à l'arrêt du programme et d'accéder à des emplacements de mémoire inattendus de cette manière.

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'invocations de fonctions imbriquées. Par défaut, une exception est générée si la profondeur d'appel dépasse un nombre maximal adapté à la taille de la pile par défaut de la plateforme. Si la variable d'environnement QV4_MAX_CALL_DEPTH contient un nombre, ce nombre 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 1234 sur la plupart des plateformes. Sur QNX, elle est de 640 car la taille de la pile par défaut est plus petite que sur la plupart des plateformes.

QV4_GC_TIMELIMIT

Cette valeur est utilisée pour indiquer au moteur combien de temps il doit passer à chaque étape incrémentale du ramassage des ordures. Il peut s'agir d'un nombre positif, spécifiant la limite de temps en millisecondes, ou de 0. Si la valeur est 0, le ramassage des ordures devient non incrémental.
QV4_MM_AGGRESSIVE_GCLa définition de cette variable d'environnement permet d'exécuter le ramasse-miettes avant chaque allocation de mémoire. Cette opération est très coûteuse à l'exécution, mais elle permet de découvrir rapidement de nombreuses erreurs de gestion de la mémoire, par exemple la suppression manuelle d'un objet appartenant au moteur QML de C++.
QV4_MM_CROSS_VALIDATE_INCREMENTAL_GCLa définition de cette variable d'environnement permet d'exécuter des étapes de débogage supplémentaires afin de reconnaître les cas où le ramasse-miettes incrémental se comporte mal en comparant son comportement à celui du ramasse-miettes non incrémental.
QV4_PROFILE_WRITE_PERF_MAPSous Linux, l'utilitaire perf peut être utilisé pour profiler les programmes. Pour analyser les fonctions JavaScript compilées par JIT, il a besoin de connaître leur nom et leur emplacement dans la mémoire. Pour fournir ces informations, il existe une convention qui consiste à créer un fichier spécial appelé perf-<pid>.map dans /tmp, que perf lit ensuite. Cette variable d'environnement, si elle est définie, fait en sorte que le JIT génère ce fichier.
QV4_SHOW_BYTECODEAffiche le bytecode IR généré par Qt sur la console. Doit être combiné avec QML_DISABLE_DISK_CACHE ou le bytecode déjà mis en cache ne sera pas affiché.
QV4_DUMP_BASIC_BLOCKSAffiche les blocs de base de chaque fonction compilée à l'avance. Les détails des blocs sont imprimés sur la console. En outre, des graphiques de flux de contrôle avec le code d'octets pour 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 ["-", "1", "true"] ou si les fichiers ne peuvent pas être ouverts, les graphiques sont envoyés à la sortie standard (stdout).
QV4_VALIDATE_BASIC_BLOCKSEffectue des vérifications sur les blocs de base d'une fonction compilée à l'avance pour valider sa structure et sa cohérence. Si la validation échoue, un message d'erreur est affiché sur la console.

Le QML Disk Cache accepte d'autres variables d'environnement qui permettent d'affiner son comportement. En particulier, QML_DISABLE_DISK_CACHE peut être 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.