Meteor: depurar en el lado del servidor

78

¿Alguien conoce un buen método para depurar el código del lado del servidor? Intenté habilitar la depuración de Node.js y luego usar el inspector de nodo, pero no muestra nada de mi código.

Termino usando console.log pero esto es muy ineficiente.

Actualización: encontré que el siguiente procedimiento funciona en mi máquina Linux:

  1. Cuando ejecuta Meteor, generará dos procesos

    proceso1: / usr / lib / meteor / bin / node /usr/lib/meteor/app/meteor/meteor.js

    process2: / usr / lib / meteor / bin / node /home/paul/codes/bbtest_code/bbtest02/.meteor/local/build/main.js --keepalive

  2. Necesita enviar kill -s USR1 en process2

  3. Ejecute el inspector de nodos y podrá ver el código de su servidor

En mi primer intento, modifico la última línea en el script de inicio de meteor en / usr / lib / meteor / bin / meteor para

exec "$DEV_BUNDLE/bin/node" $NODE_DEBUG "$METEOR" "$@"

y ejecutar NODE_DEBUG=--debug meteoren el símbolo del sistema. Esto solo puso --debug flag en process1, por lo que solo veo archivos de meteoritos en el inspector de nodos y no pude encontrar mi código.

¿Alguien puede verificar esto en una máquina Windows y Mac?

usuario1416682
fuente
6
Para su información, en lugar de console.log, use Meteor._debug (termina llamando a console.log, pero hay una nota que dice que se mejorará algún día).
Josh
Vea mi respuesta, en MAC está funcionando, pude ver y depurar mis archivos js.
Nachiket
1
Probé esto en mi Mac, pero no fue así.
Gezim
1
@ Harmal000 ha vinculado a esta pregunta: ¿quiso vincular a otra?
Kevin
Este artículo es realmente útil sobre la depuración en meteor.js joshowens.me/easily-debugging-meteor-js
Julien Leray

Respuestas:

88

En Meteor 0.5.4 esto se ha vuelto mucho más fácil:

Primero ejecute los siguientes comandos desde la terminal:

npm install -g node-inspector
node-inspector &
export NODE_OPTIONS='--debug-brk'
meteor

Y luego abra http://localhost:8080en su navegador para ver la consola del inspector de nodos.

Actualizar

Desde Meteor 1.0, solo puede escribir

meteor debug

que es esencialmente un atajo para los comandos anteriores, y luego inicie el inspector de nodos en su navegador como se mencionó.

Actualizar

En Meteor 1.0.2 se ha agregado una consola o shell. Puede resultar útil generar variables y ejecutar comandos en el servidor:

meteor shell
Sander van den Akker
fuente
1
¡Gracias por publicar tu respuesta! Asegúrese de leer detenidamente las preguntas frecuentes sobre la autopromoción. También tenga en cuenta que es necesario que publique un descargo de responsabilidad cada vez que enlace a su propio sitio / producto.
Andrew Barber
1
¿Cómo desactivo este depurador? Cada vez que ejecuto meteoreste depurador se ejecuta y bloquea mi aplicación de meteoritos para que no ejecute nada en el lado del cliente.
fuzzybabybunny
la consola genera siempre [object Object], por ejemplo:console.log('asd') [object Object]
sitios
1
¿Es posible imprimir valores? ¿cómo?
sitios
¿Existe alguna documentación oficial sobre meteor debug. No puedo encontrar mi código para establecer un punto de interrupción.
Tony Brix
16

Las aplicaciones de meteoritos son aplicaciones de Node.js. Al ejecutar una aplicación Meteor con el meteor [run]comando, puede configurar la NODE_OPTIONSvariable de entorno para que se inicie nodeen modo de depuración .

Ejemplos de NODE_OPTIONSvalores de variables de entorno:

  • --debug
  • --debug=47977 - especificar un puerto
  • --debug-brk - romper en la primera declaración
  • --debug-brk=5858 - especificar un puerto y romper en la primera declaración

Si es así export NODE_OPTIONS=--debug, todos los meteorcomandos ejecutados desde el mismo shell heredarán la variable de entorno. Alternativamente, puede habilitar la depuración solo para una ejecución, conNODE_OPTIONS="--debug=47977" meteor .

Para depurar, ejecute node-inspectoren un shell diferente, luego vaya a http://localhost:8080/debug?port=<the port you specified in NODE_OPTIONS>, independientemente de lo que node-inspectorle indique que ejecute.

Sergey.Simonchik
fuente
10

Para iniciar node.js en modo de depuración, lo hice de esta manera:

  1. abrir /usr/lib/meteor/app/meteor/run.js
  2. antes de

    nodeOptions.push(path.join(options.bundlePath, 'main.js')); 
    

    añadir

    nodeOptions.push('--debug');
    

Aquí hay pasos prácticos adicionales para adjuntar el depurador eclipse:

  1. use '--debug-brk' en lugar de '--debug' aquí, porque es más fácil para mí adjuntar node.js usando eclipse como depurador.
  2. agregar 'depurador;' en el código donde quieres depurar (prefiero esta forma personalmente)
  3. ejecutar meteoro en la consola
  4. adjuntar a node.js en eclipse (herramientas V8, adjuntar a localhost: 5858)
  5. ejecutar, esperar a que se active el depurador

cuando inicie meteor en la carpeta de su aplicación de meteoritos, verá ese " depurador escuchando en el puerto 5858 " en la consola.

Mason Zhang
fuente
si está usando mrt, por supuesto, la ruta a run.js es diferente.
Jameson Quinn
... como en ~ / .meteorite / meteors / meteor / meteor / 0a148c69d6af9832006a6f6d27cc112ed90cb3e4 / app / meteor /
Jameson Quinn
Mis archivos se duplican en /usr/liby /usr/local/por razones desconocidas. Si no le funciona, intente editar en /usr/local/meteor/app/meteor/run.jslugar de/usr/lib/meteor/app/meteor/run.js
zVictor
Gracias, tu solución es la más fácil que he encontrado. No requiere estar matando el proceso, ni establecer variables en la línea de comando.
zVictor
10

On Meteor 1.0.3.1 (actualización a la respuesta de Sergey.Simonchik)

Inicie su servidor con meteor run --debug-port=<port-number>

Apuntar navegador a http://localhost:6222/debug?port=<port-number>

¿Dónde <port-number>está un puerto que especifique?

En su código, agregue un debugger; donde desea establecer su punto de interrupción.

Dependiendo de dónde debugger;se invoque, se interrumpirá en la ventana del navegador de su cliente o servidor con el inspector abierto.

Ferndopolis
fuente
7

Me gusta establecer puntos de interrupción a través de una GUI. De esta forma, no tengo que acordarme de eliminar ningún código de depuración de mi aplicación.

Así es como logré hacerlo del lado del servidor para mi aplicación de meteoritos local:

meteor debug

inicie su aplicación de esta manera.

Abra Chrome en la dirección que le proporcione. PUEDE tener que instalar https://github.com/node-inspector/node-inspector (¿podría venir incluido con Meteor ahora? No estoy seguro)

Verá un código de meteorito interno extraño (no el código de la aplicación que escribió). presiona play para ejecutar el código. Este código simplemente inicia su servidor para escuchar conexiones.

Solo después de presionar reproducir, verá un nuevo directorio en la estructura de carpetas del depurador llamado "aplicación" . Allí están los archivos de su proyecto de meteorito. Establezca un punto de interrupción en la línea que desee.

Abra la dirección local de su aplicación . ¡Esto ejecutará el código del lado del servidor y usted debería poder alcanzar su punto de interrupción!

Nota: tienes que volver a abrir el inspector y volver a realizar este proceso cada vez que se reinicia la aplicación.

Sabrina Leggett
fuente
5

No estoy seguro de por qué no funcionó para usted.
Puedo usarlo siguiendo los pasos en la consola (Mac).

$ ps  
$ kill -s USR1 *meteor_node_process_id*  
$ node-inspector &

Los pasos anteriores se mencionan en https://github.com/dannycoates/node-inspector . Sirve para adjuntar el inspector de nodos al proceso del nodo en ejecución.

Nachiket
fuente
He probado solo en Mac, ¿estás usando Mac?
Nachiket
Sí, tengo una Mac. ¿Cómo se agrega el punto de interrupción en el código? ¿Cuáles son los pasos exactos que usa para todo el proceso?
Gezim
después de los pasos anteriores (de esta respuesta), comienzo el inspector. $ node-inspector y abrió 127.0.0.1:8080/debug?port=5858 en Chrome. Pude ver mis archivos en la pestaña fuente en webkit-inspector
Nachiket
1
Intenté esto, agregando ambos debuggerpuntos de interrupción en el inspector, pero ninguno de ellos funcionó. ¿Alguna idea de por qué?
Jakub Arnold
Cuando mire ps | grep node(o similar) asegúrese de elegir el pid main.js para señalar, no su proceso de nodo padre. Así es como lo hice funcionar.
quinn
4

Escribí un pequeño paquete de meteoritos llamado meteor-inspector que simplifica el uso de node-inspector para depurar aplicaciones de meteoritos. Administra internamente el ciclo de vida del inspector de nodos y, por lo tanto, el usuario no necesita reiniciar el depurador manualmente después de que algunos archivos hayan cambiado.

Para obtener más detalles e instrucciones de uso concretas, consulte https://github.com/broth-eu/meteor-inspector .

caldo-eu
fuente
4

para meteoro 1.3.5.2, ejecutar

meteor debug --debug-port 5858 + n n es un número distinto de cero, esto hará que el inspector de nodos use 8080 + n como puerto web.

usuario7378851
fuente
3

WebStorm , el poderoso IDE gratuito para desarrolladores de código abierto, facilita la depuración del lado del servidor.

Lo probé en Windows y la configuración fue sencilla: vea mi respuesta .

Dan Dascalescu
fuente
3

Un inspector que resuelve mis problemas es la consola del servidor de meteoritos. Aquí está el proceso que seguí para instalarlo:

  1. En la carpeta de su proyecto, agregue el paquete inteligente server-eval:

    mrt add server-eval
    

    Para Meteor 1.0:

    meteor add gandev:server-eval
    
  2. Reinicie meteoro.

  3. Descargue el crxarchivo de extensión de Chrome desde aquí .
  4. Abra la página de extensiones en Chrome y arrastre el crxarchivo a la página de extensiones.
  5. Reinicia Chrome.
  6. Consulte el inspector web para evaluar el código del lado del servidor:

    ingrese la descripción de la imagen aquí

En comparación con el inspector de nodos, tengo una salida más clara.

sitios
fuente
por lo que recuerdo, funcionó con puntos de interrupción, pero no estoy seguro.
sitios
¿recuerdas cómo los configuraste? a través de herramientas de desarrollo o incode?
Sabrina Leggett
herramientas de desarrollo, pero no recuerdo exactamente cómo
sitios