Как отследить все функции в модуле Erlang, кроме одной? - PullRequest
2 голосов
/ 20 мая 2010

Я хотел отследить все функции в модуле erlang с dbg:tpl, но одна из внутренних функций заняла 95% файла трассировки. Затем я хотел исключить только эту единственную функцию и обнаружил, что это не так просто, как я думал, что будет.

Я знаю, что существуют отличные возможности сопоставления с образцом для аргументов при трассировке.

  • Есть ли аналогичная возможность применить сопоставление с образцом для функций?

    eg.: {'=/=', '$2', function_name}

Я также открыт для нестандартных решений!

Спасибо!

Ответы [ 2 ]

5 голосов
/ 20 мая 2010

Это может быть достигнуто как одно утверждение с пониманием списка:

[dbg:tpl(Mod, F, []) || {F, _Ar} <- Mod:module_info(functions), not lists:member(F, DontTrace)].

Где Mod - это модуль, по которому вы хотите выполнить трассировку, а DontTrace - это список имен функций, которые не должны отслеживаться.

1 голос
/ 20 мая 2010
dbg:tpl(mod,[]).
dbg:ctpl(mod,notthisfunction).

Не проверял это, но разве это не поможет? Не знаю, как это сделать в одну строку.

...