2010-03-12 5 views
4

Comme vous le savez, il est maintenant possible de tracer des fonctions Erlang en utilisant la forme courte:Tracing Fonctions Erlang - formes courtes

dbg:tpl(Module, Function, x). 

au lieu de l'habituel:

dbg:tpl(Module, Function, dbg:fun2ms(fun(_) -> exception_trace() end)). 

Je suis en fait se demandant si un formulaire court similaire est disponible pour return_trace(). Quelque chose comme:

dbg:tpl(Module, Function, r). 

Au lieu de:

dbg:tpl(Module, Function, dbg:fun2ms(fun(_) -> return_trace() end)). 

Le code source dans le module dbg semble suggérer non:

new_pattern_table() -> 
    PT = ets:new(dbg_tab, [ordered_set, public]), 
    ets:insert(PT, 
      {x, 
     term_to_binary([{'_',[],[{exception_trace}]}])}), 
    ets:insert(PT, 
      {exception_trace, 
     term_to_binary(x)}), 
    PT. 

Mais je peux me tromper. En connaissez-vous?

+2

Vous voudrez peut-être utiliser un emballage 'dbg': http://github.com/eproxus/erlang_user_utilities (auto-promotion éhontée) –

+0

Merci pour le partage. Il semble utile ... –

+0

Belle enveloppe; rend la vie plus simple! –

Répondre

5

Pas vraiment, mais vous pouvez vous rappeler le nombre saved dans le résultat de dbg:tpl et le réutiliser:

1> dbg:tracer(). 
{ok,<0.33.0>} 
2> dbg:p(all,c). 
{ok,[{matched,[email protected],25}]} 
3> dbg:tpl(lists, sort, dbg:fun2ms(fun(_) -> return_trace() end)). 
{ok,[{matched,[email protected],2},{saved,1}]} 
4> dbg:tpl(lists, sum, 1). 
{ok,[{matched,[email protected],2},{saved,1}]} 
5> lists:sum([1,2,3]). 
6 
6> (<0.31.0>) call lists:sum([1,2,3]) 
(<0.31.0>) call lists:sum([1,2,3],0) 
(<0.31.0>) call lists:sum([2,3],1) 
(<0.31.0>) call lists:sum([3],3) 
(<0.31.0>) call lists:sum([],6) 
(<0.31.0>) returned from lists:sum/2 -> 6 
(<0.31.0>) returned from lists:sum/2 -> 6 
(<0.31.0>) returned from lists:sum/2 -> 6 
(<0.31.0>) returned from lists:sum/2 -> 6 
(<0.31.0>) returned from lists:sum/1 -> 6 
+1

+1. C'est malin :) –