web-dev-qa-db-fra.com

Pourquoi mon débogueur s’arrête-t-il visuellement sur la mauvaise ligne?

J'utilise

[email protected]
[email protected] 
[email protected] (64-bit)
macOS Sierra 10.12.5
[email protected]
[email protected]

Récemment, le débogueur a commencé à s’arrêter sur de mauvaises lignes, mais uniquement visuellement. La plupart du temps, il se situe entre 8 et 14 lignes derrière le point d’arrêt réel.

par exemple.

* la barre orange indique le point d'arrêt dans Google Chrome

sortie de la console:

 enter image description here

En outre, comme vous pouvez le constater, certaines lignes sont assombries, ce qui signifie que je ne peux pas définir de point d'arrêt à partir du navigateur.

Le comportement est identique dans le débogueur interne WebStorm. Donc, je pense que ce n'est pas la faute de Chrome. Il semble que le mappage de source soit cassé. Je ne sais pas si c'est WebStorm ou Meteor qui en est la cause. Dans ces conditions, il est très difficile de déboguer ...

16
henk

Il est difficile de dire avec certitude, mais il semble que le problème que vous rencontrez soit lié à un bogue qui fait que Meteor génère des cartes source incorrectes.

cartes sources

Ce n'est pas la "faute" de votre navigateur. Il affiche simplement le code et la position qui lui est fourni par les cartes source de votre projet.

Le fichier app.js et la carte source (app.js.map) sont générés par le processus de construction de Meteor et sont servis à partir du répertoire .meteor/local/build/programs/web.browser/app.

Le fichier .map indique au navigateur comment afficher la source d'origine et quels segments du fichier app.js généré sont mappés à quels segments du code source d'origine.

Une grande explication sur les aspects techniques des cartes sources peut être trouvée ici .

Vous pouvez visualiser vos cartes sources en ligne et voir quelles cartes utilisaient cet outil (choisir custom... et faites glisser/déposez les fichiers .js et .map.

le bogue suspect

Dans le cadre du processus de construction, Meteor utilise le package babel-compiler Meteor. À un moment donné, un bug a provoqué la création de cartes non valides après les transformations de Babel.

Le bogue est actuellement suivi sur GitHub et les gens de Meteor semblent se rapprocher de la cause.

que pouvez-vous faire?

Pour le moment, il n'y a pas de solution rapide et facile.

Tu peux soit:

  • Observez le fil de bogue et attendez qu'il soit résolu et déboguez sans cartes source pour le moment (probablement mieux, si le bogue sera corrigé prochainement).
  • Débarrassez-vous des clones locaux des packages Meteor pertinents (cela pourrait fonctionner, je n'ai pas creusé dans les problèmes de dépendance et je ne le recommande pas vraiment, mais voici une façon de le faire ).
  • Exécutez Meteor à partir d’une caisse git dans un état connu jusqu’à ce que le correctif soit publié.

La dernière option est ce que @ hwilson a fait afin de pouvoir localiser le bogue via un git bisect.

Vous pouvez vous référer au document de développement Meteor pour obtenir des informations détaillées sur la méthode d'exécution de l'outil Météor à partir de la caisse, mais l'essentiel est le suivant:

Tout d’abord, assurez-vous que votre code, y compris .meteor/versions et .meteor/packages, a bien été extrait dans le contrôle de source, car vous devrez probablement les gâcher temporairement et vouloir les restaurer une fois le bogue corrigé.

  1. git clone --recursive https://github.com/meteor/meteor.git dans un répertoire de votre choix (par exemple, /home/yourname/src/remote.
  2. cd meteor.
  3. git checkout 25a89b5 pour obtenir le dernier bon commit connu.
  4. git submodule update --init --recursive pour vous assurer que tout est encore en or après la fin du processus.
  5. ./meteor --help pour que la version extraite démarre
  6. Dans votre projet, supprimez les informations de version du fichier .meteor/packages, car elles seront probablement incompatibles avec celles proposées par votre commande.
  7. Dans votre répertoire de projet, exécutez /home/yourname/src/remote/meteor/meteor run.

Ceci exécutera la version vérifiée de Meteor. Vous devrez peut-être faire un meteor reset (avertissement: cela efface la base de données mongo locale) ou au moins nettoyer une partie de .meteor/local (par exemple, les cartes sources) pour que cela fonctionne, mais cela peut être inutile.

C’est beaucoup d’efforts pour un bogue qui, je suppose, sera résolu dans un proche avenir, mais j’ai décidé d’inclure cette information en partie afin de pouvoir servir de documentation pour les futurs problèmes liés aux cartes sources.

9
MasterAM

C'est difficile à dire avec certitude. Sur une recherche Google rapide, il semblerait que vous n'êtes pas le seul à voir cela. Comme @ MasterAM l'a mentionné, c'est probablement à cause des cartes source issues de la transpilation. Je ne pense pas que vous puissiez faire beaucoup de choses à ce sujet, mais vous pouvez essayer d'effacer le navigateur et les caches IDE qui semblent avoir fonctionné pour certains.

Javascript s'arrête sur une ligne sans point d'arrêt en mode débogage distant

Effacement du cache de Webstorm

1
klvs

Pas sûr de ce scénario, mais avons fait face à une situation similaire lors du débogage de Java avec Eclipse. Cela se produit lorsque le code source et le code compilé/interprété en cours de débogage diffèrent. 

Essayez de déboguer un simple code js pour vérifier si le débogueur js de chrome lui-même a un problème. Si cela fonctionne, alors une explication pour les lignes de code qui ne sont pas «activées pour le débogage» serait qu’elles se trouvent toutes sur la même ligne (jusqu’à l’instruction qui enregistre «7»). Cela aurait également pu compenser le numéro de ligne dans le navigateur.

Ceci est une explication possible.

0
Ravindra HV