edi9999
edi9999

Reputation: 20574

Chrome Console: VM

When executing a script directly in the console in Chrome, I saw this:

enter image description here

Does anyone know what's the meaning of VM117:2

What does VM stand for ?

Upvotes: 57

Views: 34125

Answers (2)

loislo
loislo

Reputation: 14129

It is abbreviation of the phrase Virtual Machine. In the Chrome JavaScript engine (called V8) each script has its own script ID.

Sometimes V8 has no information about the file name of a script, for example in the case of an eval. So devtools uses the text "VM" concatenated with the script ID as a title for these scripts.

Some sites may fetch many pieces of JavaScript code via XHR and eval it. If a developer wants to see the actual script name for these scripts they can use sourceURL. DevTools parses and uses it for titles, mapping etc.

Upvotes: 58

computingfreak
computingfreak

Reputation: 5129

Thanks to @MRB,

I revisited this problem, and found the solution today, thanks to https://stackoverflow.com/a/63221101/1818089

queueMicrotask (console.log.bind (console, "Look! No source file info..."));

It will group similar elements, so make sure you add a unique identifier to each log line to be able to see all data.

enter image description here

Demonstrated in the following example.

Instead of

data = ["Apple","Mango","Grapes"];
for(i=0;i<10;i++){
    queueMicrotask (console.log.bind (console, " info..."+i));
}

use

data = ["Apple","Mango","Grapes"];
for(i=0;i<data.length;i++){
    queueMicrotask (console.log.bind (console, " info..."+i));
}

A better way would be to make a console.print function that does so and call it instead of console.log as pointed out in https://stackoverflow.com/a/64444083/1818089

// console.print: console.log without filename/line number
console.print = function (...args) {
    queueMicrotask (console.log.bind (console, ...args));
}

Beware of the grouping problem mentioned above.

enter image description here

Upvotes: 2

Related Questions