Erlang tracing (собирать данные из процессов только в моих модулях) - PullRequest
0 голосов
/ 15 марта 2012

При трассировке моих модулей с использованием dbg я столкнулся с проблемой, как собирать сообщения, такие как spawn, exit, register, unregister, link, unlink, Getting_linked, Getting_unlinked, которые разрешены erlang: trace, но только для этих процессов. которые были созданы из моих модулей напрямую? В качестве примера, мне не нужно знать, какие процессы создает модуль io, когда я вызываю формат io: format в некоторой функции модуля. Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 20 марта 2012

Краткий ответ:

Один из способов - просмотреть вызов сообщений, за которыми следуют spawn сообщений.

Длинный ответ:

Я не эксперт по dbg . Причина в том, что я использовал (imho гораздо лучше, безопаснее и еще удобнее) альтернативу: pan , от https://gist.github.com/gebi/jungerl/tree/master/lib/pan

API суммируется в HTML-документе .

С помощью pan: start вы можете отслеживать трассировку, задав модуль обратного вызова , который получает все сообщения трассировки. Тогда ваш модуль обратного вызова может их обработать, например, отслеживать процессы в ETS или данные о состоянии, которые передаются при каждом вызове. Формат сообщений трассировки указывается в pan: scan .

Для примеров модулей обратного вызова вы можете посмотреть src / cb _ *. Erl .

Теперь к вашему вопросу: С pan вы можете отслеживать обработку процессов и вызовы в вашем модуле favourit следующим образом:

pan:start({ip, CallbackModule}, Node, all, [procs,call], {Module}).

где Module - это имя вашего модуля (в данном случае: sptest) Затем модуль обратного вызова (в данном случае: cb_write) может просматривать сообщения spawn , которые следуют за сообщением call в том же процессе, например ::

32      - {call,{<6761.194.0>,{'fun',{shell,<node>}}},{sptest,run,[[97,97,97]]},{1332,247999,200771}}
33      - {spawn,{<6761.194.0>,{'fun',{shell,<node>}}},{{<6761.197.0>,{io,fwrite,2}},{io,fwrite,[[77,101,115,115,97,103,101,58,32,126,115,126,110],[[97,97,97]]]}},{1332,247999,200805}}

Поскольку pan также использует тот же конец трассировки, что и dbg , сообщения трассировки (и информацию) также можно собирать с использованием BIF-файлов трассировки Erlang, но pan намного безопаснее.

...