【发布时间】:2019-09-23 02:07:15
【问题描述】:
您好,我正在运行一个问题,我从一个链接的进程中得到一个错误。我不知道如何调试进程中出了什么问题。
我启用了process_flag(trap_exit,true),但仍然无法找出问题所在。
错误
30> conc2:initFam(). <0.170.0> =ERROR REPORT==== 24-Aug-2019::07:55:03.403000 === Error in process <0.170.0> with exit value: {undef,[{conc2,brother,[],[]}]}如何读取错误?那么返回元组中的
undef是什么,元组的第二个元素中的两个[]是什么? 我可以理解brother方法中发生的一些事情,但我无法理解。
如何在 Erlang 中调试进程?
-module(conc2).
-compile([debug_info]).
-export([initFam/0]).
initFam()->
Bid=spawn(?MODULE,brother,[]),
Bid.
brother()->
Sid=spawn(?MODULE,sister,[self()]),
link(Sid),
brotherLoop(Sid).
brotherLoop(Sid)->
receive
kill->Sid ! issue_kill;
Msg->[Msg|brotherLoop(Sid)]
end.
sister()->
receive
MSG ->
exit(killed_by_bro)
end.
基本上,我生成一个进程,然后生成另一个进程并链接到它,第一个进程被递归调用以侦听终止消息。
后期编辑:
我还尝试将 PID 传递给 Shell 的 brother 进程,以查看它在哪一行崩溃,但我仍然无法收到消息:
initFam()->
Bid=spawn(?MODULE,brother,[self()]),
Bid.
brother(Shell)->
Shell! i_m_here,
Sid=spawn(?MODULE,sister,self()),
link(Sid),
brotherLoop(Sid).`
如您所见,我仍然无法收到来自brother 的任何消息,我不应该在它崩溃之前收到消息吗?
41> conc2:initFam(). <0.203.0> =ERROR REPORT==== 24-Aug-2019::08:13:31.662000 === Error in process <0.203.0> with exit value: {undef,[{conc2,brother,[<0.196.0>],[]}]} 42> flush(). ok
【问题讨论】: