J'ai ajouté un point d'arrêt dans mon fichier javascript (jaydata.js) et j'appuyais sur "Passer à l'appel de fonction suivant". Quand il est arrivé à une ligne qui était:
},
un autre fichier intitulé "[VM] (8312)" est apparu. J'ai continué à cliquer sur "Passer à l'appel de fonction suivant" et maintenant mon écran est:
Quels sont ces scripts étranges et mystérieux intitulés "[VM] (XXXX" et d'où viennent-ils?
debugging
google-chrome-devtools
AllieCat
la source
la source
Réponses:
[VM] (scriptId)
n'a pas de signification particulière. C'est un nom factice pour nous aider à distinguer le code qui n'est pas directement lié à un nom de fichier, tel que le code créé aveceval
and friends.Dans le passé, tous ces scripts étaient simplement étiquetés
(program)
.Si vous êtes intéressé, il suffit de chercher
"[VM]"
dans le code source de Chromium , vous découvrirez que ces chiffres n'ont aucune signification significative en dehors des outils de développement.mise à jour 25/06/2015
[VM] (scriptId)
a été renommé il y aVMscriptId
quelque temps , et voici le lien direct vers le résultat de la recherche au cas où la valeur changerait à nouveau.la source
[VM] (scriptId)
a été renommé il y aVMscriptId
quelque temps , mais j'ai conservé la réponse dans son état actuel pour ne pas invalider la question. Le dernier lien de recherche de codes est: cs.chromium.org/%22VM%5C%22%20+%22 (lien direct vers le résultat de la recherche au cas où la valeur changerait à nouveau: chromium.googlesource.com/chromium/blink/+/… )Chaque fois que vous chargez du contenu HTML via AJAX et que ce contenu contient des
<script>
balises, le script sera évalué à l'aide de eval () et reconnu par la vue Sources de Chrome comme un nouveau fichier commençant par «VM». Vous pouvez toujours accéder à l'onglet Réseau, trouver la requête AJAX et afficher la réponse HTML dans son intégralité, y compris votre script.la source
src=/test.js
puis provoque une erreur qui remonte à test.js, le traceback contient le nom de fichier correct, mais par la suite, les stacktraces contiennent la magie de la VM. Cela rend impossible d'obtenir le code source [de la même origine] pour les fichiers dans le stacktrace plus d'une fois, et vous ne pouvez pas les mettre en cache, car vous ne savez pas quel fichier est lequel dans les futures stacktraces. Ce problème est résolu dans les outils de développement, mais pas dans les applications Web.Lorsque vous utilisez eval, le javascript est jeté dans les VM du débogueur Chrome. Afin de voir les js créés avec eval sous Chrome Debugger Sources, définissez cet attribut à la fin (merci Splaktar) des js:
Est-il possible de déboguer le chargement dynamique de JavaScript par un débogueur comme WebKit, FireBug ou IE8 Developer Tool?
la source
Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
Si vous souhaitez déboguer des fichiers JS injectés par programme dans Chrome, vous pouvez utiliser l'
debugger;
instruction, c'est plus rapide que de trouver où se trouve votre script et aussi plus rapide que de générer un fichier avec sourceurl .Il fonctionne comme un point d'arrêt et identifie automatiquement votre code dans l'onglet source de chrome partout où vous utilisez l'
debugger;
instruction.Notez que la source du script est un fichier VMXXX.
la source
debugger;
déclaration, il peut démystifier d'où viennent les mystérieux 'scripts étranges et mystérieux intitulés "[VM] (XXXX" "s'il le souhaite.J'ai trouvé que la VM était générée à partir de certaines extensions Chrome - elles insèrent CSS / JS dans la page et Chrome utilise les fichiers de la VM pour l'exécuter.
la source
Lorsque vous déboguez une source de fenêtre enfant (iframe) qui est ensuite déchargée, votre fichier source recevra également le préfixe VM et l'arrière-plan jaune.
la source
J'ai rencontré le même problème. Le problème est que le code de mon application a été considéré comme une boîte noire par accident. Lorsque j'ai essayé d'entrer dans le code, il a continué à ouvrir ces
VMXXXX
onglets.Après avoir supprimé le paramètre de boîte noire pour le fichier js de mon application, j'ai pu parcourir mon code avec succès.
la source
pour éviter cela
Et puis boîte noire
^.*blackbox-this.js$
Idem pour setInterval / setTimeout quand il obtient une chaîne (mais c'est quand même une mauvaise pratique, non?;))
Est-ce que ça marche pour toi?
la source
J'ai eu le même problème lorsque je déboguais mon application angulaire. Voir trop de scripts de VM qui ne pouvaient pas être mis en boîte noire prenait beaucoup de temps à déboguer. J'ai plutôt choisi mozilla / IE explorer pour déboguer.
la source