【问题标题】:Some suggestions when debugging an erlang program (on Erlide)调试 erlang 程序时的一些建议(在 Erlide 上)
【发布时间】:2013-10-14 21:21:42
【问题描述】:

我想调试我的 erlang 项目,但我在工作中遇到了一些问题。

我的项目目标是在互联网上玩纸牌游戏。目前,我只是在同一台机器上运行所有线程(4 个客户端和服务器),我无法深入了解我的程序的正确性。

首先,如果我放置不同的断点,然后我一步一步地查看发生了什么,我的代码似乎可以正常工作,但如果我删除所有断点,一些线程退出,原因是“终止”或“终止”。可能与逻辑的线程有关,所以:

  • 线程何时因“终止”而退出,何时因“已终止”而退出?

一个非常奇怪的事情是,当我删除所有断点时,线程在执行期间退出:

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 开始。

【问题讨论】:

    标签: debugging erlang erlide


    【解决方案1】:

    关于与erlide的关系:

    首先,您是否尝试在 Erlide 外部运行并使用标准 OTP 调试器进行调试?如果你的代码有问题,这会显示它是否与erlide有关。

    确切的行为取决于您的代码:进程如何链接它们的监督层次结构(如果有)。很难准确地说出这里发生了什么。在 erlide 中运行的唯一不寻常之处在于控制台是一个远程 shell,因此并非所有输出都能到达它。您的 io:formats 似乎转到了一个文件,所以这应该不是问题。

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 2020-12-22
      • 2010-11-13
      相关资源
      最近更新 更多