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
对您正在寻找的任何内容进行迭代归零。
从 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
对您正在寻找的任何内容进行迭代归零。