Ein gemeinsames Muster in Erlang ist die rekursive Schleife, den Zustand hält:Frage einen Erlang-Prozess nach seinem Zustand ab?
loop(State) ->
receive
Msg ->
NewState = whatever(Msg),
loop(NewState)
end.
Gibt es eine Möglichkeit, den Zustand eines laufenden Prozess mit einem bif oder Verfolgung oder etwas zu fragen? Da Absturzmeldungen sagen "... wenn Zustand war ..." und den Status des abgestürzten Prozesses anzeigen, dachte ich, dies wäre einfach, aber ich war enttäuscht, dass ich keine Bif finden konnte, um dies zu tun.
Also, dann dachte ich, die Verwendung der Trace des dbg-Moduls würde es tun. Leider glaube ich, da diese Schleifen für den Endanruf optimiert sind, erfasst dbg nur den ersten Aufruf der Funktion.
Irgendeine Lösung?
Die Funktion ist sys: get_status/1. – cthulahoops
+1: sys: get_status/1 ist dein Freund. Ich benutze das die ganze Zeit. –
Haha, tolle Sachen! Ich werde es auch die ganze Zeit benutzen. übrigens, gleber, ich beabsichtige, es nur für das Debuggen zu verwenden, nicht für die langfristige Protokollierung auf einem Produktionssystem. Und natürlich weiß ich, was der Staat ist, dass ich erwähne. Ich bin mir nicht sicher, warum die Leute in diesem Thread dies immer wieder klären wollen. Ich verwende den Zustand genau so, wie es beispielsweise Joe Armstrong in seinem Buch tut. Es gibt keine andere Möglichkeit, den temporären Zustand in Erlang beizubehalten, als ihn durch rekursive Schleifen einzufädeln. Mein Verständnis ist, dass genau das hinter den Kulissen von gen_server vor sich geht. – mwt