erlang dbg - отслеживает вызовы всех функций всеми функциями

Из использования trace и dbg в Erlang я знаю, что можно отслеживать вызовы указанных функций из всех функций, используя

1>dbg:p(all, c).

Однако как можно отследить вызовы всех функций из всех функций? например:

1>dbg:foo().
*ALL Erlang function calls will be traced from here on out. Prepare yourself.*
2>lists:append("abc", "def").
*trace*

1 ответ

Решение

Отслеживание всех вызовов всех функций - это не то, что вы хотите делать, так как это легко затмит ваш вывод и сделает вашу оболочку непригодной для использования. В конце концов, оболочка также вызывает функции для выполнения своих обязанностей, как и dbg так что вы в конечном итоге увидите бесконечные следы звонков io функции, участвующие в генерации и отображении трассы.

Вместо этого взгляните на различные dbg:tp а также dbg:tpl функции Примените их после вашего звонка dbg:p(all, c). Они позволяют отслеживать конкретные модули и конкретные функции. Начните с трассировки конкретной функции или модуля, а затем, основываясь на трассе, которую вы видите, расширите свою трассировку для вызывающих пользователей этой функции. Вы также можете использовать dbg:ctp а также dbg:ctpl отключить трассировку для определенных функций или модулей, если они больше не относятся к вашим усилиям по отладке. При таком подходе вы можете использовать dbg итеративно сосредоточиться на том, что вы ищете.

Другие вопросы по тегам