2010-06-19 4 views
4

메시지 크기가 다소 커서 도움이되지 않기 때문에 노드가 다른 노드에서받은 메시지를 검사하려고하지만 flush()이 아닌 다른 방법으로 검사하려고합니다. 또한 erlang:process_info(self(), messages_queue_len). 메시지를 볼 수 있지만 디버깅 목적으로 한 번에 하나의 메시지를 여러 가지 변수로 추출 할 수있는 방법이 필요합니다.erlang - 한 번에 한 번씩 사서함 메시지 검사

답변

1

receive은 사서함에서 메시지를 가져 오는 erlang 프리미티브입니다.

참조 : 당신은 그냥 디버깅을 위해 셸에서 첫 번째 메시지를 얻고 싶다면 http://www.erlang.org/doc/getting_started/conc_prog.html#id2263965

,이 같은 재미를 정의하는 시도 할 수 :

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

당신은에보고를 할 수 있습니다 Erlang의 dbg 모듈 (이 경우, 자체에())는 모든 메시지를 처리하여 (R)를 수신

dbg:tracer(). 

추적 :

는 추적을 시작

dbg:p(self(), r). 

추가 정보 here.

+0

좋은 정보를 차단 방지하기 위해! – hyperboreean

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} 

가 ... 덕분에

관련 문제