0

dbgを使用してモジュールをトレースしているときに、spawn、exit、register、unregister、link、unlink、getting_linked、getting_unlinkedなどのメッセージを収集する方法に問題が発生しました。これらはerlang:traceで許可されていますが、生成されたプロセスに対してのみです。私のモジュールから直接?例として、モジュール関数でio:formatを呼び出すときに、ioモジュールが作成するプロセスを知る必要はありません。誰かがこの問題を解決する方法を知っていますか?

4

1 に答える 1

0

短い答え:

1つの方法は、コールメッセージとそれに続くスポーンメッセージを確認することです。

長い答え:

私はdbgの専門家ではありません。その理由は、私が(はるかに優れた、より安全で、さらに便利な)代替手段を使用しているためです:panhttps ://gist.github.com/gebi/jungerl/tree/master/lib/panから

APIはhtmlドキュメントに要約されています。

pan:startを使用すると、すべてのトレースメッセージを受信するコールバックモジュールを指定してトレースできます。次に、コールバックモジュールはそれらを処理できます。たとえば、ETSのプロセスや、すべての呼び出しに渡される状態データを追跡します。トレースメッセージの形式は、pan:scanで指定されます。

コールバックモジュールの例については、src / cb_*。erlを参照してください。

今あなたの質問に:パンを使用すると、次のようにお気に入りモジュールのプロセス処理と呼び出しを追跡できます:

pan:start({ip, CallbackModule}, Node, all, [procs,call], {Module}).

ここで、Moduleはモジュールの名前(この場合はsptest)です。次に、コールバックモジュール(この場合:cb_write)は、同じプロセス内の呼び出しメッセージに続くスポーンメッセージを確認できます。

32      - {call,{<6761.194.0>,{'fun',{shell,<node>}}},{sptest,run,[[97,97,97]]},{1332,247999,200771}}
33      - {spawn,{<6761.194.0>,{'fun',{shell,<node>}}},{{<6761.197.0>,{io,fwrite,2}},{io,fwrite,[[77,101,115,115,97,103,101,58,32,126,115,126,110],[[97,97,97]]]}},{1332,247999,200805}}

panもdbgと同じトレースバックエンドを使用しているため、ErlangトレースBIFを使用してトレースメッセージ(および情報)を収集することもできますが、panの方がはるかに安全です。

于 2012-03-20T13:14:25.513 に答える