En tant que sous-produit de l'optimisation de code effectuée par les navigateurs modernes, lors du débogage, vous ne pouvez pas "voir" toutes les variables qui "en fait" sont dans la portée. Ceci est bien connu et a été abordé dans une question précédente sur SO . Cette fonctionnalité, bien que très certainement utile en production, me gêne beaucoup pendant le développement, elle me ralentit (cela devrait être évident.)
Maintenant, ma question est, existe-t-il un moyen de désactiver ce comportement? Puis-je modifier un fichier de configuration, ou existe-t-il un plugin de navigateur, ou peut-être qu'il existe une "version de construction spéciale pour les développeurs" de l'exécutable du navigateur? J'adore taper mon code dans la console tout de suite lorsque j'écris du nouveau code, donc cela me dérange vraiment.
MISE À JOUR / MODIFICATION
Voici une solution partielle, crédit à Paul1365972.
Vous devez démarrer le navigateur Chrome à partir de la ligne de commande, avec des options spéciales, comme ceci:
- Fermer complètement Chrome
- Exécutez Chrome à partir de la console avec un
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
système d'exploitation similaire à Windows. - Ouvrez la console développeur et exécutez
"%GetHeapUsage()"
. Si vous avez correctement démarré Chrome avec l'option, un numéro sera enregistré dans la console, sinon vous obtiendrez une erreur de syntaxe.
Avec cet indicateur de ligne de commande, vous pouvez «parler au moteur V8» avec des commandes commençant par %
, qui sont des erreurs de syntaxe en JavaScript simple. Une liste des commandes V8 disponibles de ce type a été donnée dans la réponse de Paul .
Il y a %NeverOptimizeFunction()
sur cette liste, quelque chose qui ressemblait à ce que je devais appeler et en finir. Malheureusement, cette fonction ne fait pas ce que j'espérais, comme le montre la capture d'écran suivante.
(((L' autre lien de la réponse de Paul (module de noeud v8-natives) n'a pas d'importance pour nous ici dans ce contexte. Tout ce qu'il fait, c'est qu'il enveloppe les lignes simples autour des appels de fonction "%" afin que le code ne plante pas navigateurs qui ne sont pas v8.)))
(((Je me souviens d'un moment où cela a fonctionné (où cette optimisation n'a pas encore été inventée / implémentée). Je ne sais pas depuis combien de temps. Dix ans? 15 ans? Quelque chose comme ça. Quelle était la dernière version de Chrome (si ) et quelle était la dernière version de Firefox (plus sûre ici qu'elle existe) où vous pouviez faire? Cela ne vous rapportera pas la prime, mais cela vous donnera un vote positif, si vous le savez et le postez comme réponse .)))
LA SOLUTION
MERCI PETR SRNICEK
NOUVELLE QUESTION
Bien que la solution de Petr aide beaucoup, elle n'est pas parfaite. Cette question devient trop longue, j'ai donc posté une nouvelle question sur la façon dont la solution de Petr peut être améliorée. (Je pourrais bien sûr éditer cette question ici, mais cela me semblerait "non historique", si vous voyez ce que je veux dire.)
v8-natives
bibliothèque enveloppe simplement les% d'appels importants dans le code dans une bibliothèque simple qui devrait être noops
dans un navigateur ou un noeud qui n'a pas été démarré dans le drapeau spécial --allow-natives-syntax ..
%NeverOptimizeFunction(foo)
je l'ai appelé aussi pour bodyOnload, "juste parce que", pensant "bien, ça ne fera pas mal". Le problème est que ce foo
n'est PAS désoptimisé comme je l'espérais. La variable lorem
est invisible. Disons que je veux écrire le code qui doit aller dans la fonction foo. Au lieu de le taper dans mon éditeur de texte, je le tape dans la console de développement (pendant que le débogueur est assis sur foo), voir s'il fait ce que je veux, puis le copier / coller de la console dans mon éditeur de texte. C'est comme ça que j'aime travailler. Et je ne peux pas. En raison de l'optimisation. Tu piges?
--js-flags
(dont plusieurs liées à TurboFan ) ainsi que plusieurs commandes natives V8 avant que Paul1365972 ne publie sa réponse, mais je n'ai pas pu obtenir le comportement souhaité. Je pense que cette approche pourrait être une impasse. Il pourrait être utile d'ajouter une [v8]
balise à cette question. Quelqu'un avec une compréhension approfondie du fonctionnement interne du V8 pourrait être en mesure de clarifier si c'est la voie à suivre ou peut-être vous orienter dans la bonne direction.