Meteor: Debuggen auf der Serverseite


78

Kennt jemand eine gute Methode zum Debuggen von serverseitigem Code? Ich habe versucht, Node.js Debug zu aktivieren und dann Node-Inspector zu verwenden, aber es zeigt keinen meiner Codes an.

Am Ende benutze ich console.log, aber das ist sehr ineffizient.

Update: Ich habe festgestellt, dass das folgende Verfahren auf meinem Linux-Computer funktioniert:

  1. Wenn Sie Meteor ausführen, werden zwei Prozesse erzeugt

    process1: / 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. Sie müssen kill -s USR1 auf process2 senden

  3. Führen Sie Node-Inspector aus und Sie können Ihren Servercode sehen

Bei meinem ersten Versuch ändere ich die letzte Zeile im Meteor-Startskript in / usr / lib / meteor / bin / meteor auf

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

und NODE_DEBUG=--debug meteoran der Eingabeaufforderung ausführen . Dies hat nur das Flag --debug auf process1 gesetzt, sodass ich nur Meteor-Dateien im Node-Inspector sehe und meinen Code nicht finden konnte.

Kann jemand dies auf Windows- und Mac-Computern überprüfen?


6
Zu Ihrer Information, anstelle von console.log verwenden Sie Meteor._debug (es wird schließlich console.log aufgerufen, aber es gibt einen Hinweis, dass es eines Tages verbessert wird.)
Josh

Siehe meine Antwort, auf MAC funktioniert es, ich konnte meine js-Dateien sehen und debuggen.
Nachiket

1
Ich habe es auf meinem Mac versucht, aber es geht nicht.
Gezim

1
@ Harmal000 du hast auf diese Frage verlinkt - wolltest du auf eine andere verlinken?
Kevin

Dieser Artikel ist wirklich nützlich über das Debuggen in meteor.js joshowens.me/easily-debugging-meteor-js
Julien Leray

Antworten:


88

In Meteor 0.5.4 ist dies viel einfacher geworden:

Führen Sie zuerst die folgenden Befehle vom Terminal aus:

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

Öffnen http://localhost:8080Sie dann in Ihrem Browser die Node-Inspector-Konsole.

Aktualisieren

Seit Meteor 1.0 können Sie einfach tippen

meteor debug

Dies ist im Wesentlichen eine Verknüpfung für die oben genannten Befehle. Starten Sie dann den Knoteninspektor wie erwähnt in Ihrem Browser.

Aktualisieren

In Meteor 1.0.2 wurde eine Konsole oder Shell hinzugefügt. Es kann nützlich sein, Variablen auszugeben und Befehle auf dem Server auszuführen:

meteor shell

1
Vielen Dank für Ihre Antwort! Bitte lesen Sie die FAQ zur Eigenwerbung sorgfältig durch. Beachten Sie auch , dass Sie jedes Mal, wenn Sie auf Ihre eigene Website / Ihr eigenes Produkt verlinken, einen Haftungsausschluss veröffentlichen müssen.
Andrew Barber

Danke, ich wusste es nicht!
Sander van den Akker

1
Wie deaktiviere ich diesen Debugger? Jedes Mal, wenn ich meteordiesen Debugger ausführe , wird meine Meteor-App ausgeführt und daran gehindert, irgendetwas clientseitig auszuführen .
Fuzzybabybunny

Konsole gibt immer [Objekt Objekt] aus, zum Beispiel:console.log('asd') [object Object]
Sites

1
ist es möglich Werte zu drucken? Wie?
Websites

16

Meteor-Apps sind Node.js Apps. Wenn Sie eine Meteor-App mit dem meteor [run]Befehl ausführen, können Sie die NODE_OPTIONSUmgebungsvariablenode so konfigurieren , dass sie im Debug-Modus startet .

Beispiele für NODE_OPTIONSUmgebungsvariablenwerte:

  • --debug
  • --debug=47977 - Geben Sie einen Port an
  • --debug-brk - Pause bei der ersten Aussage
  • --debug-brk=5858 - Geben Sie einen Port an und brechen Sie bei der ersten Anweisung ab

Wenn Sie dies tun, erben export NODE_OPTIONS=--debugalle meteorBefehle, die von derselben Shell ausgeführt werden, die Umgebungsvariable. Alternativ können Sie das Debuggen nur für einen Lauf mit aktivieren NODE_OPTIONS="--debug=47977" meteor.

Führen Sie zum Debuggen node-inspectoreine andere Shell aus und gehen Sie dann zu http://localhost:8080/debug?port=<the port you specified in NODE_OPTIONS>, unabhängig davon, was node-inspectorSie zum Ausführen auffordert.


10

Um node.js im Debug-Modus zu starten, habe ich es folgendermaßen gemacht:

  1. Öffnen Sie /usr/lib/meteor/app/meteor/run.js
  2. Vor

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

    hinzufügen

    nodeOptions.push('--debug');
    

Hier sind zusätzliche praktische Schritte zum Anhängen der Debugger-Eclipse:

  1. Verwenden Sie hier '--debug-brk' anstelle von '--debug', da es für mich einfacher ist, node.js mithilfe von Eclipse als Debugger anzuhängen.
  2. füge 'debugger' hinzu; in dem Code, in dem Sie debuggen möchten (ich persönlich bevorzuge diesen Weg)
  3. Meteor in der Konsole ausführen
  4. In Eclipse an node.js anhängen (V8-Tools, an localhost anhängen: 5858)
  5. Laufen Sie, warten Sie, bis der Debugger getroffen wird

Wenn Sie Meteor in Ihrem Meteor-App-Ordner starten, sehen Sie den " Debugger, der Port 5858 überwacht " in der Konsole.


Wenn Sie mrt verwenden, ist der Pfad zu run.js natürlich anders.
Jameson Quinn

... wie in ~ / .meteorite / meteors / meteor / meteor / 0a148c69d6af9832006a6f6d27cc112ed90cb3e4 / app / meteor /
Jameson Quinn

Meine Dateien werden in /usr/libund /usr/local/aus unbekannten Gründen dupliziert . Wenn es bei Ihnen nicht funktioniert, versuchen Sie es /usr/local/meteor/app/meteor/run.jsanstelle von/usr/lib/meteor/app/meteor/run.js
zVictor

Vielen Dank, Ihre Lösung ist die einfachste, die ich je gefunden habe. Es muss weder beendet werden, noch Variablen über die Befehlszeile gesetzt werden.
zVictor

10

Auf Meteor 1.0.3.1 (Update auf Sergey.Simonchik Antwort)

Starten Sie Ihren Server mit meteor run --debug-port=<port-number>

Zeigen Sie mit dem Browser auf http://localhost:6222/debug?port=<port-number>

Wo <port-number>ist ein Port, den Sie angeben?

Fügen debugger;Sie in Ihrem Code eine Stelle hinzu, an der Sie Ihren Haltepunkt festlegen möchten.

Je nachdem, wo debugger;aufgerufen wird, wird es entweder in Ihrem Client- oder Server-Browserfenster mit geöffnetem Inspektor unterbrochen.


7

Ich setze gerne Haltepunkte über eine GUI. Auf diese Weise muss ich nicht daran denken, Debugging-Code aus meiner App zu entfernen.

So habe ich es auf der Serverseite für meine lokale Meteor-App geschafft:

meteor debug

Starten Sie Ihre App auf diese Weise.

Öffnen Sie Chrome unter der angegebenen Adresse. Möglicherweise müssen Sie https://github.com/node-inspector/node-inspector installieren (möglicherweise wird es jetzt mit Meteor geliefert? Nicht sicher).

Sie werden einen seltsamen internen Meteor-Code sehen (nicht den App-Code, den Sie geschrieben haben). Drücken Sie die Wiedergabetaste , um den Code auszuführen. Dieser Code startet einfach Ihren Server, um auf Verbindungen zu warten.

Erst nachdem Sie die Wiedergabetaste gedrückt haben, wird in Ihrer Debugger-Ordnerstruktur ein neues Verzeichnis mit dem Namen "App" angezeigt . Darin befinden sich Ihre Meteor-Projektdateien. Setzen Sie dort einen Haltepunkt in der gewünschten Zeile.

Öffnen Sie die lokale Adresse Ihrer App . Dadurch wird Ihr serverseitiger Code ausgeführt und Sie sollten in der Lage sein, Ihren Haltepunkt zu erreichen!

Hinweis: Sie müssen den Inspektor erneut öffnen und diesen Vorgang bei jedem Neustart Ihrer App erneut durchführen!



5

Ich bin mir nicht sicher, warum es bei Ihnen nicht funktioniert hat.
Ich kann es verwenden, indem ich die Schritte auf der Konsole (Mac) befolge.

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

Die oben genannten Schritte sind unter https://github.com/dannycoates/node-inspector aufgeführt . Es dient zum Anhängen des Knoteninspektors an den laufenden Knotenprozess.


Ich habe nur auf dem Mac getestet. Verwenden Sie den Mac?
Nachiket

Ja, ich habe einen Mac. Wie fügt man den Haltepunkt im Code hinzu? Was sind die genauen Schritte, die Sie für das Ganze verwenden?
Gezim

Nach den obigen Schritten (dieser Antwort) starte ich den Inspektor. $ node-inspector & 127.0.0.1:8080/debug?port=5858 in Chrome geöffnet . Ich konnte meine Dateien auf der Registerkarte "Quelle" im Webkit-Inspector sehen
Nachiket

1
Ich habe dies versucht und sowohl debuggerals auch Haltepunkte im Inspektor hinzugefügt , aber keiner von beiden hat funktioniert. Irgendeine Idee warum?
Jakub Arnold

Wenn Sie sich ps | grep node(oder ähnliches) ansehen, stellen Sie sicher, dass Sie die zu signalisierende PID main.js auswählen, nicht den übergeordneten Knotenprozess. So habe ich es zum Laufen gebracht.
Quinn

4

Ich habe ein kleines Meteor-Paket namens Meteor-Inspector geschrieben, das die Verwendung von Node-Inspector zum Debuggen von Meteor-Apps vereinfacht. Es verwaltet intern den Lebenszyklus von Node-Inspector und daher muss der Benutzer den Debugger nicht manuell neu starten, nachdem einige Dateien geändert wurden.

Weitere Details und konkrete Gebrauchsanweisungen finden Sie unter https://github.com/broth-eu/meteor-inspector .


4

für Meteor 1.3.5.2 ausführen

meteor debug --debug-port 5858 + n n ist eine Zahl ungleich Null. Dies führt dazu, dass der Node-Inspector 8080 + n als Webport verwendet.


3

WebStorm , die leistungsstarke IDE, die für Open Source-Entwickler kostenlos ist, erleichtert das Debuggen auf dem Server erheblich.

Ich habe es unter Windows getestet und die Konfiguration war schmerzlos - siehe meine Antwort .


3

Ein Inspektor, der meine Probleme löst, ist die Meteor-Serverkonsole. Hier ist der Prozess, den ich befolgt habe, um es zu installieren:

  1. Fügen Sie in Ihrem Projektordner das Smart-Paket hinzu server-eval:

    mrt add server-eval
    

    Für Meteor 1.0:

    meteor add gandev:server-eval
    
  2. Starten Sie den Meteor neu.

  3. Laden Sie die crxChrome-Erweiterungsdatei hier herunter .
  4. Öffnen Sie die Erweiterungsseite in Chrome und ziehen Sie die crxDatei auf die Erweiterungsseite.
  5. Starten Sie Chrome neu.
  6. Überprüfen Sie den Webinspektor, um den serverseitigen Code zu bewerten:

    Geben Sie hier die Bildbeschreibung ein

Im Vergleich zum Node-Inspector habe ich eine klarere Ausgabe.


Soweit ich mich erinnere, hat es mit Haltepunkten funktioniert, aber ich bin mir nicht sicher.
Websites

Erinnerst du dich, wie du sie eingestellt hast? über dev tools oder incode?
Sabrina Leggett

Entwickler-Tools, aber ich erinnere mich nicht genau, wie
Websites

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.