erlang - 一次检查一次邮箱消息

时间:2010-06-19 20:43:03

标签: erlang

我正在尝试检查节点从其他节点接收的消息,但是以flush()之外的其他方式检查,因为消息大小相当大并且没有帮助。另外,我可以看到带有erlang:process_info(self(), messages_queue_len).的消息,但我想在某种变量中一次提取一条消息以进行调试。

3 个答案:

答案 0 :(得分:7)

您可能希望查看Erlang中的dbg模块。

启动示踪剂:

dbg:tracer().

跟踪进程收到的所有消息(r)(在本例中为self()):

dbg:p(self(), r).

更多信息here

答案 1 :(得分:1)

receive是用于从邮箱中获取邮件的erlang原语。

请参阅:http://www.erlang.org/doc/getting_started/conc_prog.html#id2263965

如果您只想在shell中获取第一条消息进行调试,可以尝试定义这样的乐趣:

1> self() ! foo.
foo
2> F = fun() -> receive X -> X end end.
#Fun<erl_eval.20.67289768>
3> F().
foo

答案 2 :(得分:1)

或者您可以使用:

1> F = fun() -> receive X -> {message, X} after 0 -> no_message end end.
#Fun<erl_eval.20.111823515>
2> F().
no_message
3> self() ! foo.
foo
4> self() ! bar.
bar
5> F().
{message, foo}
6> F().
{message, bar}

...防止阻止