erlang dbg - 跟踪所有函数对所有函数的调用

erlang dbg - trace calls to all functions by all functions

Using trace and dbg in 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*

跟踪对所有函数的所有调用不是您想要做的事情,因为这很容易淹没您的输出并使您的 shell 无法使用。毕竟,shell 也调用函数来执行其职责,dbg 也是如此,因此您最终会看到对 io 函数调用的无穷无尽的痕迹,这些痕迹涉及生成和显示痕迹.

相反,请查看 the various dbg:tp and dbg:tpl functions. Apply them after your call to dbg:p(all, c). They allow you to trace specific modules and specific functions. Start by tracing a particular function or module, and then based on the trace you see, widen your trace to callers of that function. You can also use dbg:ctp and dbg:ctpl 以关闭对特定函数或模块的跟踪,一旦它们不再与您的调试工作相关。使用这种方法,您可以使用 dbg 对您正在寻找的任何内容进行迭代归零。