Los desarrolladores de JavaScript que han pasado tiempo en lenguajes como C a menudo pierden la capacidad de usar ciertos tipos de introspección, como números de línea de registro y qué método invocó el método actual de. Bueno, si estás usando V8 (Chrome, Node.js) puedes emplear lo siguiente.Accediendo al número de línea en V8 JavaScript (Chrome y Node.js)
46
A
Respuesta
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);
Lo anterior se registrará 19
.
Combinado con arguments.callee.caller
puede acercarse al tipo de registro útil que obtiene en C a través de macros.
-2
al parecer esto también funciona en el nodo o el navegador Chrome (posiblemente otros también)
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
Funciona en V8 (utilizado por Chrome y Node.js) uso como se menciona en el título de mi publicación. –
+8
Mike, creo que el OP estaba hablando de JavaScript –
Cuestiones relacionadas
- 1. límite de memoria en Node.js (y V8 de Chrome)
- 2. Node.js y V8 de recolección de basura
- 3. JavaScript Standard Library for V8
- 4. pila y montón en V8 (JavaScript)
- 5. ¿Cómo se configura v8 opciones en Node.js
- 6. Javascript eval() Excepción - número de línea
- 7. Accediendo al ámbito externo en JavaScript
- 8. ¿Tiene node.js alguna ventaja de rendimiento sobre el Javascript del lado del cliente (frente a Chrome/V8)?
- 9. Google Javascript V8 - multithreading
- 10. Node.js módulo v8-perfilador no se instalará
- 11. Depuración de JavaScript línea por línea usando Google Chrome
- 12. ¿Hay una buena referencia para los argumentos de la línea de comandos de V8 al usar node.js
- 13. Jenkins/Hudson: ¿accediendo al número de compilación actual?
- 14. Asignación de número de línea de Javascript
- 15. Javascript regex cuelga (usando v8)
- 16. matriz de JavaScript al número
- 17. Ejecutando V8 Javascript Engine Independiente
- 18. Google Chrome Extension - Accediendo a DOM
- 19. Búsqueda de fuga de memoria Node.js sin v8-profiler
- 20. Node.js con V8 adecuado para dispositivos de memoria limitada?
- 21. Javascript: bajo rendimiento en V8 de funciones agregadas a String.prototype?
- 22. Nueva línea en Node.js
- 23. en línea Servidor Node.js
- 24. Error en el motor regex JavaScript V8 cuando se hace coincidir el comienzo de la línea?
- 25. Perl: Javascript :: Plantillas V8 - del perl
- 26. ¿Qué versión de Javascript es compatible en node.js
- 27. Passport.js: accediendo al usuario al utilizar la red troncal
- 28. Plugin de Chrome: Accediendo a canalizaciones nombradas en Windows
- 29. Accediendo al 'localhost' del Cliente desde JavaScript Online
- 30. ¿Cómo puedo determinar el número de línea actual en JavaScript?
https://code.google.com/p/v8/wiki/ JavaScriptStackTraceApi # Customizing_stack_traces tiene una lista de otros métodos disponibles en v8 StackTrace API. Una lista general: getThis, getTypeName, getFunctionName, getFinalName, getMethodName, GetFileName, getLineNumber, getColumnNumber, getEvalOrigin, isToplevel, isEval, isNative, isConstructor – zamnuts
Consulte también esta respuesta para obtener un ejemplo de código para generar el seguimiento completo. http://stackoverflow.com/questions/6163807/customized-stack-traces-in-google-chrome-developer-tools/10942404#10942404 –
Se puede ver un ejemplo de uso de esta API aquí: https://github.com /jameswomack/capn/blob/master/test/capn.js –