0

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 で開始されます。

4

1 に答える 1

0

erlideとの関係について:

まず、Erlide の外で実行して、標準の OTP デバッガーでデバッグしようとしましたか? コードに何らかの問題がある場合、それが erlide に関連しているかどうかが表示されます。

正確な動作はコードによって異なります。つまり、プロセスがスーパーバイザー階層 (存在する場合) にどのようにリンクされているかです。ここで何が起こっているのかを正確に言うのは難しいです。erlide での実行で唯一珍しいことは、コンソールがリモート シェルであるため、すべての出力がコンソールに到達するわけではないことです。あなたの io:formats はファイルに送られているように見えるので、問題にはなりません。

于 2013-10-14T10:36:09.470 に答える