9

No importa. La razón por la que esto no funcionó: me olvidé de meteor reset por lo que debugger no tuvo la oportunidad de detenerse. Duh!¿Cómo depurar y registrar el código propio en el servidor de Meteor?

Más información: Estoy usando el método en la respuesta de Mason Chang a la pregunta relacionada, no al kill -s USR1 [proc_id] (donde pude ver los scripts, pero no pude detenerme en la función de inicio()). Además, estoy usando meteorito.

Estoy tratando de depurar el código Meteor.startup(function()) en el lado del servidor Meteor (es decir, bajo /server) con el nodo-inspector, he leído este question, y después de la respuesta al cambio run.js, pero de alguna manera, mi propio guión para la puesta en marcha la función no aparece en la sección de scripts de Chrome.

¿Cómo veo mi código aquí y establezco puntos de interrupción y me detengo en esos puntos? Por cierto, el Meteor_debug() no da salida a nada a stdout, stderr o la consola del navegador node-inspector. También probé console.log() sin ningún resultado. ¿Cómo habilitar el inicio de sesión en el lado del servidor Meteor?

Si es importante, estoy en la rama auth.

El código aquí es muy simple (/server/bootstrap.js):

Meteor.startup(function() { 
if (Logs.find().count() === 0) { 
    var data = [/*...some data...*/]; 
    var timestamp = (new Date()).getTime(); 
    Meteor._debug("timestamp: "+timestamp+", data.len: " + data.length); 
    debugger; 
    for (var i = 0; i < data.length; i++) { 
    data[i].timestamp = timestamp++; 
    var entry_id = Logs.insert(data[i]); 
    Meteor._debug("entry_id: "+ entry_id); 
    } 
} 
}); 

Respuesta

10

Ahora que sé cómo hacer esto, voy a responder a mi propia pregunta para que podamos mantener esta información (en detalles) aquí: (esto se basa en la respuesta de Mason Chang a este question)

  1. detener la ejecución de meteoritos..
  2. Editar /usr/lib/meteor/app/meteor/run.js (o el correspondiente run.js instalado por meteorito en HOME//.meteorite/meteors/meteor/meteor/[LONG_HEX_CODE]/app/meteor):
    cambio de la línea de
    [path.join(bundle_path, 'main.js'), '--keepalive']
    a
    ['--debug-brk', path.join(bundle_path, 'main.js'), '--keepalive']
    // - debug-brk hace que la nueva rotura de hilo en la primera línea;
  3. Agregue debugger declaraciones como puntos de interrupción en su código de servidor;
  4. Ejecute node-inspector & en un terminal de servidor. (google "node-inspector" para instalarlo)
  5. Ejecutar meteorito; (Esto no tendrá el depurador adjunto, ya que aún no hay ningún subproceso de servidor, si no tiene abierta ninguna ventana de cliente).
  6. Actualizar la ventana del navegador del cliente; (para iniciar un hilo del servidor que se romperá en la primera línea, y adjúntelo al node-inspector.)
  7. Abra una ventana del navegador en [SERVIDOR: 8080], el código del servidor se detiene en la primera línea (main.js en su [PROJECT_DIR]/.meteor/local/build);
  8. Pulse el botón EJECUTAR en la ventana del navegador del depurador; dependiendo de dónde estén sus instrucciones debugger, es posible que tenga que realizar algunas acciones de activación en la ventana del navegador del cliente para ejecutar en los puntos de interrupción debugger. (Tenga en cuenta que si espera demasiado para presionar el botón EJECUTAR, la ventana de su cliente puede expirar y debe volver a actualizarse).
  9. Ahora puede hacer las depuraciones habituales en la ventana del depurador del servidor: paso a paso, ver variables , ejecute en la consola, mire la pila, etc.

Editar: Para iniciar la sesión en el servidor, puede utilizar cualquiera Meteor._debug() y console.log(), que se mostrarán en la terminal donde se ejecuta meteor. En el lado del cliente, estas instrucciones de registro saldrán a la consola del desarrollador de su navegador. herramientas.

+0

¡Impresionante, gracias! – huyz

+0

¿Este truco aún se aplica puesto que Meteor ahora tiene soporte para '--debug' y' --debug-brk'? – Brandon

+3

@Brandon: las cosas son mucho más fáciles ahora. Consulte [Depuración en las Preguntas frecuentes sobre meteoros extraoficiales] (https://github.com/oortcloud/unofficial-meteor-faq/blob/master/README.md#how-do-i-debug-my-meteor-app) (gracias a Kasima Tharnpipitchai). Con suerte, Qichao puede actualizar la respuesta. –

3

En MacOSX, se puede utilizar con Chrome:

NODE_OPTIONS="--debug-brk" meteor 

y en otro terminal de

node-inspector --debug-port=5858 --web-port=12345 

A continuación, conecte Chrome para 127.0.0.1:12345/debug?port=5858

De lo contrario, con Webstorm, simplemente cree una configuración de Depuración Remota Node.js y ejecútela:

 
Name : Meteor 
Host : 127.0.0.1 
Port 5858 

Tenga en cuenta que una vez que el servidor se haya iniciado, debe presionar ejecutar para que Meteor se cargue, y luego hacer una pausa para depurar desde la consola del servidor.

Cuestiones relacionadas