Gli sviluppatori JavaScript che hanno trascorso del tempo in linguaggi come C spesso non riescono a utilizzare determinati tipi di introspezione, come i numeri di riga di registrazione e il metodo con cui è stato richiamato il metodo corrente a partire dal. Bene, se usi V8 (Chrome, Node.js) puoi utilizzare quanto segue.Accesso al numero di riga in V8 JavaScript (Chrome & Node.js)
46
A
risposta
77
Object.defineProperty(global, '__stack', {
get: function(){
var orig = Error.prepareStackTrace;
Error.prepareStackTrace = function(_, stack){ return stack; };
var err = new Error;
Error.captureStackTrace(err, arguments.callee);
var stack = err.stack;
Error.prepareStackTrace = orig;
return stack;
}
});
Object.defineProperty(global, '__line', {
get: function(){
return __stack[1].getLineNumber();
}
});
console.log(__line);
Quanto sopra registrerà 19
.
In combinazione con arguments.callee.caller
è possibile avvicinarsi al tipo di registrazione utile che si ottiene in C tramite macro.
-2
a quanto pare questo funziona anche nel nodo o browser Chrome (possibilmente altri pure)
line = (o) ->
b = Error.prepareStackTrace
Error.prepareStackTrace = (_, stack) -> stack
e = new Error
Error.captureStackTrace e, o
s = e.stack
Error.prepareStackTrace = b
s[1].getLineNumber()
console.log line this
o:
lineNumber=(o)->E=Error;p='prepareStackTrace';b=E[p];E[p]=((_,s)->s);e=new E;E.captureStackTrace e,o;s=e.stack;E[p]=b;s[1].getLineNumber()
console.log lineNumber this
+1
Funziona con V8 (usato da Chrome e Node.js) come menzionato nel titolo del mio post. –
+8
Mike, penso che l'OP stia parlando di JavaScript –
Problemi correlati
- 1. limite di memoria in Node.js (e Chrome V8)
- 2. Node.js e V8 garbage collection
- 3. node.js presenta vantaggi prestazionali rispetto a Javascript lato client (rispetto a Chrome/V8)?
- 4. Javascript eval() Eccezione - numero di riga
- 5. Google Javascript V8 - multithreading
- 6. array JavaScript al numero
- 7. Accesso al timestamp di una richiesta HTTP in Node.js
- 8. Node.js/v8: Come creare la mia istantanea per accelerare l'avvio
- 9. Node.js modulo v8-profiler non verrà installato
- 10. Estensione Google Chrome - Accesso al DOM
- 11. Inserisci stringa al numero di riga nodejs
- 12. Chrome/V8 non raccoglie i dati di riferimento circolari?
- 13. Running V8 Javascript Engine Standalone
- 14. Come viene interpretato ed eseguito javascript asincrono in Node.js?
- 15. node.js v8 la raccolta di dati inutili non sembra attivare
- 16. Accesso a JSON.stringify da node.js Collegamenti C++
- 17. Mostra breakpoint al numero di riga in RichTextFx CodeArea
- 18. Problema di accesso al metodo esposto di ExternalInterface in Google Chrome
- 19. Accesso al template Django {{Variable}} da JavaScript
- 20. Accesso al microfono da un browser - Javascript
- 21. Accesso all'URL iframe dall'estensione Chrome
- 22. regex Javascript si blocca (usando v8)
- 23. Chrome Frame: errore di accesso negato in IE9
- 24. Node.js con V8 adatto per dispositivi con memoria limitata?
- 25. SetTimeout in Node.js
- 26. Chrome: chiama la funzione Javascript dalla riga di comando (di sistema)?
- 27. Accesso al database remoto dalla riga di comando
- 28. Accesso al database SQLite dalla riga di comando
- 29. Accesso da un'estensione Chrome
- 30. Chrome/Firefox: fonte di accesso di un'estensione
https://code.google.com/p/v8/wiki/ JavaScriptStackTraceApi # Customizing_stack_traces ha un elenco di altri metodi disponibili nell'API StackTrace v8. Un elenco generale: getThis, getTypeName, getFunction, getFunctionName, getMethodName, getFileName, getLineNumber, getColumnNumber, getEvalOrigin, isToplevel, isEval, isNative, isConstructor – zamnuts
Vedere anche questa risposta per alcuni esempi di codice per generare l'intera traccia. http://stackoverflow.com/questions/6163807/customized-stack-traces-in-google-chrome-developer-tools/10942404#10942404 –
Si può vedere qualche esempio di utilizzo di questa API qui: https://github.com /jameswomack/capn/blob/master/test/capn.js –