2013-03-28 63 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