9

Non importa. Il motivo per cui questo non ha funzionato: mi sono dimenticato di meteor reset quindi debugger non ha avuto la possibilità di fermarsi. Duh!Come eseguire il debug e registrare il proprio codice sul lato server di Meteor?

Altre informazioni: Sto usando il metodo nella risposta di Mason Chang alla domanda correlata, non lo kill -s USR1 [proc_id] (dove ho potuto vedere gli script, ma non sono riuscito a fermarmi nella funzione startup().). Inoltre, sto usando meteorite.

Sto cercando di eseguire il debug del codice di Meteor.startup(function()) sul lato server Meteor (vale a dire, sotto /server) con il nodo-ispettore, ho letto questo question, e in seguito la risposta di cambiare run.js, ma in qualche modo, il mio script per l'avvio la funzione non viene visualizzata nella sezione degli script di Chrome.

Come visualizzare il mio codice qui e impostare i punti di interruzione e fermarsi in quei punti? A proposito, il Meteor_debug() non emette nulla per la console del browser stdout, stderr o node-inspector. Ho anche provato console.log() senza alcun risultato. Come abilitare la registrazione sul lato del server Meteor?

Se è importante, sono nella filiale auth.

Il codice qui è molto semplice (/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); 
    } 
} 
}); 

risposta

10

Ora che so come fare questo, io rispondere alla mia domanda in modo che possiamo tenere queste informazioni (in dettagli) qui: (Questo si basa sulla risposta di Mason Chang a questo question.)

  1. Interruzione dell'esecuzione di meteore.
  2. Modifica /usr/lib/meteor/app/meteor/run.js (o il corrispondente run.js installato da meteorite in HOME//.meteorite/meteors/meteor/meteor/[LONG_HEX_CODE]/app/meteor):
    modifica la linea
    [path.join(bundle_path, 'main.js'), '--keepalive']
    a
    ['--debug-brk', path.join(bundle_path, 'main.js'), '--keepalive']
    // - debug-BRK rende la nuova rottura filo nella prima riga;
  3. Aggiungere le istruzioni debugger come punti di interruzione nel codice del server;
  4. Eseguire node-inspector & in un terminale server. (google "node-inspector" per installarlo.)
  5. Run meteor; (questo non avrà il debugger collegato in quanto non c'è ancora un thread del server, se non hai nessuna finestra client aperta.)
  6. Aggiorna la finestra del browser client; (. Per avviare un thread del server che si romperà in prima linea, ed essere attaccato al node-inspector)
  7. Aprire una finestra del browser in [SERVER: 8080], il codice del server si ferma alla prima linea (main.js nella tua [PROJECT_DIR]/.meteor/local/build);
  8. Premere il pulsante RUN nella finestra del browser del debugger; a seconda di dove sono le tue istruzioni debugger, potresti dover eseguire alcune azioni di attivazione nella finestra del browser client per eseguire i punti di interruzione debugger. (Si noti che se si attende troppo a lungo per premere il pulsante RUN, la finestra del client potrebbe scadere e si deve ricaricare nuovamente.)
  9. Ora è possibile eseguire le normali operazioni di debug nella finestra del debugger del server: passaggio, visualizzazione delle variabili , esegui in console, guarda lo stack, ecc.

Edit: per l'accesso lato server, è possibile utilizzare sia Meteor._debug() e console.log(), che appariranno nel terminale in cui si esegue meteor. Sul lato client, queste istruzioni di registrazione verranno inviate alla console dello sviluppatore del browser. utensili.

+0

Fantastico, grazie! – huyz

+0

Questo hack si applica ancora da quando Meteor ora ha il supporto per '--debug' e' --debug-brk'? – Brandon

+3

@Brandon: le cose ora sono molto più semplici. Vedi [Debugging in the Unofficial meteor FAQ] (https://github.com/oortcloud/unofficial-meteor-faq/blob/master/README.md#how-do-i-debug-my-meteor-app) (grazie a Kasima Tharnpipitchai). Spero che Qichao possa aggiornare la risposta. –

3

su MacOSX, è possibile utilizzare con Chrome:

NODE_OPTIONS="--debug-brk" meteor 

e in un altro terminale

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

Quindi collegare Chrome per 127.0.0.1:12345/debug?port=5858

Altrimenti con Webstorm, basta creare una configurazione Debug remoto Node.js ed eseguirla:

 
Name : Meteor 
Host : 127.0.0.1 
Port 5858 

Si noti che una volta avviato il server, è necessario premere Esegui affinché Meteor si carichi e quindi mettere in pausa per eseguire il debug dalla console del server.