In practice they are only useful for less-aggressive minifiers and 'basically sugar' compilers like coffee script. Trying to use them for something like emscripten or JSIL output is a mess.
P.S. Variables live in scopes, so attaching variable information to line mappings is pretty gross... I suppose if it works it works, so better than nothing.
The 'names' field is a list of all original symbols in the program. Each mapping is 1, 4 or 5 fields long. If 5 fields long, the 5th field is an index into this names field, e.g.
Or see a more readable description on html5rocks http://www.html5rocks.com/en/tutorials/developertools/source...
It'd be great if they revised the spec to not use such opaque terminology, and directly describe what the 'names' list is used for. The only reference I can find that explains this is 'If present, the zero-based index into the “names” list associated with this segment', which I only understand how that you said what it means.
Since one of your other comments made it unclear: Does this apply to all variables, or only global variables?
Edit: I take that back. I just looked at the Blink source code, as far as I can tell, it throws away the name index. Therefore, Chrome Dev Tools won't deobfuscate symbols, but Google server-side JS deobfuscation framework will, which is a pitty. I guess it is time for a Chrome Dev Tools patch. :)