erlang プロジェクトをデバッグしたいのですが、作業に問題があります。
私のプロジェクトの目標は、インターネット上でカード ゲームをプレイすることです。今のところ、同じマシン (4 つのクライアントとサーバー) ですべてのスレッドを実行しているだけで、プログラムの正しさについて深く理解できません。
まず、さまざまなブレークポイントを配置してから、何が起こっているかを段階的に確認すると、コードが機能しているように見えますが、すべてのブレークポイントを削除すると、「終了」または「強制終了」の理由でスレッドが終了します。おそらく理由はロジックのスレッドに関連しているので、次のようになります。
- スレッドが「終了」の理由で終了するときと、「強制終了」の理由で終了するときは?
非常に奇妙なことの 1 つは、すべてのブレークポイントを削除すると、次の実行中にスレッドが終了することです。
io:format()
終了の理由があまり説明されていないため、スレッドの終了に関する 2 つの説明をここに投稿します。
<0.215.0>
[exit, {terminated,[{io,format,[#Pid<Scopone@acero.120.0>,"Super election...~n,
[]],[]},{client,loop,5,[{file,"client.erl"},{line,74}]}]}]
comunication_core_manager:init(#Port<Scopone@acero.1303>, #Pid<Scopone@acero.213.0>)
<0.221.0>
[exit, {terminated,[{io,format,[#Pid<Scopone@acero.120.0>,"Super election...~n",[]],[]},
{client,loop,5,[{file,"client.erl"},{line,74}]}]}]
comunication_scheduler_manager:loop(#Port<Scopone@acero.1303>, #Pid<Scopone@acero.215.0>,
{state,{[],[]},{dict,0,16,16,8,80,48,{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}},[],[],1,20})
今私の質問は次のとおりです。
- これらの説明に関する有用な情報を得るにはどうすればよいですか?
- io:format() で問題が発生するのはなぜですか? 多分いくつかのデッドロック?
もちろん、私はデバッグのプロではないので、あなたの意見の他のすべての提案は高く評価されています..
編集: すべてのスレッドは spawn_link で開始されます。