从在Erlang中使用trace和dbg,我知道可以使用所有函数跟踪对指定函数的调用
1>dbg:p(all, c).
Run Code Online (Sandbox Code Playgroud)
但是,一个跟踪如何调用所有函数中的所有函数?例如:
1>dbg:foo().
*ALL Erlang function calls will be traced from here on out. Prepare yourself.*
2>lists:append("abc", "def").
*trace*
Run Code Online (Sandbox Code Playgroud)
跟踪所有函数的所有调用都不是您想要做的事情,因为这会轻易淹没您的输出并使您的shell无法使用.毕竟,shell也会调用函数来执行其职责dbg
,因此您最终会看到io
对生成和显示跟踪所涉及的函数的无休止调用.
相反,看看各种dbg:tp
和dbg:tpl
功能.在您打电话之后应用它们.dbg:p(all, c).
它们允许您跟踪特定模块和特定功能.首先跟踪特定的函数或模块,然后根据您看到的跟踪,将跟踪扩展到该函数的调用者.一旦它们与您的调试工作不再相关,您还可以使用dbg:ctp
和dbg:ctpl
关闭特定功能或模块的跟踪.通过这种方法,您可以使用dbg
迭代的方式将其置于您正在寻找的任何位置.