2010-02-11 1 views
2

Je suis en train d'écrire un gestionnaire error_logger et je voudrais obtenir la stacktrace où l'erreur s'est produite (plus précisément: à l'endroit où error_logger:error* a été appelée). Mais je ne peux pas utiliser la méthode erlang:get_stacktrace(), puisque je suis dans un processus différent.Est-il possible d'obtenir la stacktrace d'une erreur dans le gestionnaire error_logger?

Est-ce que quelqu'un connaît un moyen d'obtenir un stacktrace ici?

Merci

Répondre

0

Je n'ai pas entièrement débogué, mais je suppose que les fonctions d'erreur il suffit d'envoyer un message (feu et oublier) au processus de l'enregistreur d'erreur, donc au moment où votre gestionnaire est appelé après que le message a été reçu , l'expéditeur pourrait faire quelque chose de complètement différent. Le message envoyé peut contenir le backtrace, mais j'en doute fortement.

+0

Non, il ne le contient pas. Il croit, il n'y a aucun moyen d'obtenir cette information, aussi. Je demande juste d'être sûr. :( – ZeissS

3

get_stacktrace() retourne "empiler back-trace de la dernière exception". Lancez et attrapez une exception à l'intérieur de error_logger: error() et vous pouvez ensuite récupérer la pile.

error() -> 
    try throw(a) of 
    _ -> a 
    catch 
    _:_ -> io:format("track is ~p~n", erlang:get_stacktrace()) 
    end. 
+0

Avez-vous lu la question? – Zed

+0

Quelques problèmes avec cette approche: a) Il n'y a peut-être pas d'exception réelle, juste un appel à error() b) Je ne peux pas modifier la fonction 'error()', puisque sa partie de stdlib c) Je suis dans un processus différent, donc je ne peux pas appeler 'get_stacktrace()' – ZeissS

+0

Désolé. J'ai mal compris la question. – Kent

Questions connexes