2

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*
4

1 に答える 1

7

すべての関数へのすべての呼び出しを追跡することは、実行したいことではありません。出力が簡単に圧倒され、シェルが使用できなくなるからです。結局のところ、シェルは関数を呼び出してその役割を実行するため、トレースの生成と表示に関連dbgする関数呼び出しの無限のトレースが表示されることになります。io

代わりに、さまざまな関数dbg:tpdbg:tpl関数を見てください。呼び出しの後にそれらを適用するdbg:p(all, c).と、特定のモジュールと特定の関数をトレースできます。特定の関数またはモジュールをトレースすることから始めて、表示されるトレースに基づいて、トレースをその関数の呼び出し元に広げます。また、特定の関数やモジュールがデバッグ作業に関連しなくなったら、それらのトレースを無効にするためにdbg:ctpdbg:ctplを使用することもできます。このアプローチを使用dbgすると、探しているものに繰り返し焦点を合わせることができます。

于 2015-08-14T13:24:43.427 に答える