Трассировка функций Эрланга - Короткие формы - PullRequest
4 голосов
/ 12 марта 2010

Как вы, возможно, знаете, теперь можно отслеживать функции Эрланга, используя краткую форму:

dbg:tpl(Module, Function, x).

Вместо обычного:

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

Мне действительно интересно, доступна ли подобная короткая форма для return_trace(). Что-то вроде:

dbg:tpl(Module, Function, r).

Вместо:

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

Исходный код в модуле dbg, похоже, не предлагает:

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.

Но я могу ошибаться. Вы знаете кого-нибудь?

1 Ответ

5 голосов
/ 12 марта 2010

Не совсем, но вы можете вспомнить число saved в результате из dbg:tpl и использовать его снова:

1> dbg:tracer().
{ok,<0.33.0>}
2> dbg:p(all,c).
{ok,[{matched,nonode@nohost,25}]}
3> dbg:tpl(lists, sort, dbg:fun2ms(fun(_) -> return_trace() end)).
{ok,[{matched,nonode@nohost,2},{saved,1}]}
4> dbg:tpl(lists, sum, 1).
{ok,[{matched,nonode@nohost,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
...