2013-03-28 60 views
0

我并不是Ruby中的专家,但我试图在某些脚本中跟踪该问题并且无法联系到专家在这个特定的脚本,以了解我们为什么会收到此错误。我已经缩小了这个特定功能的范围,并且从我可以告诉的范围来看,第一个打印语句会发生,但结束打印语句不会。Ruby 1.9.3:创建新对象时收到堆栈级别太深的错误

def load_power_ports(io_info) 
    return if !io_info 
    io_info.each_key do |key| 
    print key 
    if [email protected]_controllers[key.to_s.downcase] 
     @power_controllers[key.to_s.downcase] = Object.const_get($equipment_table['power_controller'][key.to_s.downcase][0].driver_class_name).new($equipment_table['power_controller'][key.to_s.downcase][0]) 
    end 
    end 
    print "end of equipment power block" 
rescue Exception => e 
    raise e.to_s + "\nUnable to create power controller: " + io_info.to_s 
end 

打印语句只看到被传递哪些信息,如何将节目远远获取和执行的迭代:堆栈层次过深的错误,只有当这个函数存在如下到底会发生。

+0

你需要做的第一件事就是把这行代码分成更小的行。那么也许你可以找到破裂的路线。 – atw13 2013-03-28 01:35:53

+1

你能否在你的描述中给出错误堆栈,这将有助于更多的调查? – 2013-03-28 04:37:02

+0

我实际上能够通过最终实现对driver_class_name的调用真的在做什么来解决它。谢谢! @ Iiya-O帮我清理了一下我的头脑。 – Sarah 2013-03-28 14:20:34

回答

1

driver_class_name的构造函数是直接还是间接调用load_power_ports?如果是这样,你最终会有无限的递归,这会给你的堆栈溢出(哦,讽刺)。这是我可以看到你可能有这个问题的唯一地方。

+1

你确实暴露了一个问题。实际上,这是具体问题的具体测试设备驱动程序。它在另一个电力设备定义中运作良好。感谢您帮助我寻找稍微不同的方向。该特定的调用仅从用户提取输入文件的名称,并指示测试框架使用一种类型的电力设备或另一种类型的电力设备。其他版本没有问题(这很巧妙地工作得很好)。我只需要调试有故障的电力设备功能! – Sarah 2013-03-28 01:53:51

+0

很高兴我能帮到你! – 2013-03-28 12:48:35

相关问题