Erlang Aufruf-Stack

8

Ich muss einige Module im fremden System debuggen, Modul hat öffentliche Funktion foo () - wie kann ich Ort (Modul und Funktionsname) wissen von welchem ​​foo () gegebenen Modul wurde aufgerufen? Ich meine Stapel von Anrufen.

PS: Ich kann das System nicht stoppen, alles was ich tun kann, indem ich dieses Modul neu lade (aber mit einigen Debug-Informationen)

%Vor%     
vinnitu 12.02.2010, 13:22
quelle

4 Antworten

17

Hier ist ein einfacher Trick:

%Vor%     
RichardC 12.02.2010 15:31
quelle
2

Dies könnte funktionieren:

%Vor%

Außer, dass es nicht für Tail-Anrufe funktioniert. Zum Beispiel, angesichts dieser zwei Funktionen:

%Vor%

Ich bekomme diese Ergebnisse:

%Vor%

Das heißt, ich kann nur bar sehen, da der Aufrufrahmen von foo bereits verlassen wurde, wenn where_am_i aufgerufen wird.

    
legoscia 12.02.2010 15:32
quelle
1
%Vor%

self () kann durch jede andere pid ersetzt werden (rpc: pinfo sollte sogar mit entfernten Procs funktionieren). Dies hilft, wenn Sie nicht einmal die Quelle oder den Strahl ändern können.

    
andi5 12.02.2010 23:01
quelle
0

Hier ist mein Code dafür:

%Vor%

Listen ist ein benutzerdefiniertes Modul im System. Benutze stattdessen dein foo-Modul.

    
tony wallace 15.12.2015 23:17
quelle

Tags und Links