Die grundlegenden Schritte zur Ablaufverfolgung für Funktionsaufrufe befinden sich auf einem nicht aktiven Knoten:
> dbg:start().
> dbg:tracer().
> dbg:tp(Module, Function, Arity, []).
> dbg:p(all, c).
... trace here
> dbg:stop_clear().
Sie können mehrere Funktionen gleichzeitig verfolgen. Fügen Sie Funktionen hinzu, indem Sie tp
für jede Funktion aufrufen . Wenn Sie nach nicht exportierten Funktionen suchen möchten, müssen Sie aufrufen tpl
. Um Funktionen zu entfernen, rufen Sie ctp
oder ctpl
auf ähnliche Weise auf. Einige allgemeine TP-Aufrufe sind:
> dbg:tpl(Module, '_', []).
> dbg:tpl(Module, Function, '_', []).
> dbg:tpl(Module, Function, Arity, []).
> dbg:tpl(M, F, A, [{'_', [], [{return_trace}]}]).
Das letzte Argument ist eine Übereinstimmungsspezifikation. Damit können Sie herumspielen dbg:fun2ms
.
Sie können die Prozesse auswählen, die mit dem Aufruf von p () verfolgt werden sollen. Die Artikel sind unter erlang: trace beschrieben. Einige Anrufe sind:
> dbg:p(all, c).
> dbg:p(new, c).
> dbg:p(Pid, c).
> dbg:p(Pid, [c, m]).
Ich denke, Sie müssen nie direkt anrufen erlang:trace
, da dbg
so ziemlich alles für Sie erledigt ist.
Eine goldene Regel für einen Live-Knoten besteht darin, nur eine Menge von Trace-Ausgaben für die Shell zu generieren, mit denen Sie eingeben können dbg:stop_clear().
. :) :)
Ich benutze oft einen Tracer, der sich nach einer Reihe von Ereignissen automatisch stoppt. Zum Beispiel:
dbg:tracer(process, {fun (_,100) -> dbg:stop_clear();
(Msg, N) -> io:format("~p~n", [Msg]), N+1 end, 0
}).
Wenn Sie für das Debuggen auf entfernten Knoten (oder mehrere Knoten) suchen, suchen pan
, eper
, inviso
oder onviso
.