Wie kann ich den Erlang Code debuggen?
Habe ich einige Ruby-und Java-hintergrund und ich bin daran gewöhnt, dass genaue zahlen der Zeilen des error logs.
Also, wenn es ist ein Fehler im kompilierten code, werde ich die Nummer der Zeile, die die Ausnahme verursacht hat, die in der Konsole ausgegeben.
Wie in diesem Beispiel Ruby:
my_ruby_code.rb:13:in `/': divided by 0 (ZeroDivisionError)
from my_ruby_code.rb:13
Es ist einfach und schnell - ich gehe einfach auf die Nummer der Zeile 13 und beheben Sie den Fehler.
Im Gegenteil, Erlang nur sagt so etwas wie:
** exception error: no match of right hand side value [xxxx]
in function my_module:my_fun/1
in call from my_module:other_fun/2
Gibt es keine Zeilennummern zu betrachten.
Und wenn ich zwei Zeilen wie
X = Param1,
Y = Param2,
in 'my_fun', wie kann verstehen, in welcher Zeile das problem liegt?
Darüber hinaus habe ich versucht zu wechseln, um Emacs+Elang-Modus von Vim, aber der einzige bonus, den ich habe, so weit ist die Fähigkeit, den Zyklus durch Kompilierungsfehler in Emacs (C-k `).
Also, der Prozess des Schreibens von code und auf der Suche nach einfachen logischen Fehler wie "no match of right hand side" scheint ein wenig umständlich.
Ich habe versucht, fügen Sie eine Menge von "io:format" - Zeilen im code, aber es ist zusätzliche Arbeit, die Zeit braucht.
Habe ich auch schon versucht zu verwenden distel, aber es erfordert 10 Schritte zum öffnen Sie einfach ein debugger einmal.
Fragen:
- Was ist am meisten gerade und einfache Weg, um debug-Erlang-code?
- Macht Emacs' erlang-Modus hat sich etwas überlegen in Bezug auf Erlang Entwicklung im Vergleich zu Vim?
- Was die Entwicklung 'write-compile-debug" - Zyklus bevorzugen Sie? Lassen Sie Emacs zu kompilieren und führen Sie den code in das terminal? Wie suchen Sie für Fehler in Ihrem Erlang-code?
InformationsquelleAutor der Frage Kirill | 2011-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Debugging Erlang-code kann schwierig sein, zu Zeiten, speziell im Umgang mit
badmatch
Fehler. Im Allgemeinen, zwei gute Richtlinien zu halten sind:function_clause
Fehler etc, die sind Weg, mehr informativ)Dass gesagt wird, mit dem Debugger sind in der Regel erforderlich, um schnell auf dem Boden von Fehlern. Ich empfehle die Verwendung der Kommandozeilen-debugger
dbg
, anstelle der grafischen ein, diedebugger
(es ist viel schneller, wenn man weiß, wie es zu benutzen, und Sie nicht haben, um context-switch aus der Erlang shell einer GUI).Gegeben, die Probe-Ausdruck, den Sie zur Verfügung gestellt, ist der Fall Häufig, dass Sie mehr als nur Variablen zugewiesen wird, die anderen Variablen (die ist absolut unnötig in Erlang):
Debuggen
badmatch
Fehler hier unterstützt durch Verwendung der Kommandozeilen-debugger:Suchen
{matched,_,1}
im return-Wert... hätte0
statt1
(oder mehr), würde es bedeuten, dass keine Funktionen entsprach dem Muster. Die vollständige Dokumentation für diedbg
Modul finden Sie hier.Gegeben, dass beide
something/1
undother:do/1
gibt immer ok, könnte Folgendes passieren:Hier können wir sehen, die ganzen call-Verfahren, und welche return-Werte waren gegeben. Wenn wir rufen es mit etwas, was wir wissen, wird scheitern:
Hier können wir sehen, dass wir eine
badmatch
Ausnahmesomething/1
genannt wurde, aber nieother:do/1
so können wir folgern, dass die badmatch vorher passiert ist, dass call.Immer geübter mit der Kommandozeilen-debugger sparen Sie viel Zeit, ob Sie Debuggen einfach (aber tricky!)
badmatch
Fehler oder etwas sehr viel komplexer.Hoffentlich wird das alles einfacher, wenn Erlang R15 kommt mit Zeilennummern in Ausnahmen!!!
InformationsquelleAutor der Antwort Adam Lindberg
Können Sie die Erlang-debugger zu Schritt durch den code und sehen, welche Linie versagt.
Vom
erl
starten Sie den debugger mit:Dann können Sie wählen, welche Module Sie möchten im interpretierten Modus (für die Fehlersuche) über die Benutzeroberfläche oder über die Konsole mit ii:
Hinzufügen von breakpoints erfolgt in der Benutzeroberfläche oder die Konsole wieder:
Auch in Erlang R15 werden wir endlich line number in stack-traces!
InformationsquelleAutor der Antwort Rob Harrop
Wenn Sie ersetzen Ihre erlang-installation mit kurzem, Sie haben die Zeilen-Nummern, die Sie Hinzugefügt wurden beginnend mit version 15.
Wenn die neuen Versionen sind noch nicht auf Ihrem Betriebssystem, Sie könnten von der Quelle erstellen oder versuchen Sie eine verpackte version hier: http://www.erlang-solutions.com/section/132/download-erlang-otp
InformationsquelleAutor der Antwort mit