編輯:(解決),因爲一個無限循環,實際上它可能升至紅寶石堆棧層次過深的異常
我被編碼並添加我得到這個方法後:
[email protected]_computer:/media/ECC3-C3B0/Prog/mts/src/mts$ rake test --trace
** Invoke test (first_time)
** Execute test
/home/user_name/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36: stack level too deep (SystemStackError)
rake aborted!
Command failed with status (1): [/home/user_name/.rvm/rubies/ruby-1.9.3-p19...]
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils.rb:53:in `block in create_shell_runner'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils.rb:45:in `call'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils.rb:45:in `sh'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb:39:in `sh'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils.rb:82:in `ruby'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb:39:in `ruby'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/testtask.rb:99:in `block (2 levels) in define'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb:60:in `verbose'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/testtask.rb:98:in `block in define'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/home/user_name/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/home/user_name/.rvm/gems/[email protected]/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/home/user_name/.rvm/gems/[email protected]/bin/rake:19:in `load'
/home/user_name/.rvm/gems/[email protected]/bin/rake:19:in `<main>'
/home/user_name/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in `eval'
/home/user_name/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in `<main>'
Tasks: TOP => test
我很確定沒有涉及無限遞歸循環。
該代碼現在以某種方式gemified,但我也有錯誤直接運行ruby文件。
感謝您對如何(獲得一些信息,運行一些測試)解決問題,如果可能的話而不必重寫整個事情的任何幫助......
環境:
- 紅寶石1.9.3p194 /導軌3.2.8,通過RVM安裝
- 在此階段程序只使用軌道串拐點功能
- 操作系統:Linux的kubuntu I386
- 存儲器4GO
- '的ulimit -s':8192(堆棧大小(KB))
我曾嘗試什麼:
- 除去在異常最初提出的代碼塊,但它仍然上調在運行時稍後一點
- 用命令行'ulimit -s 20000','ulimit -s unlimited'設置堆棧大小。同樣的錯誤,顯然是在同一個地方(這讓我想到的堆棧大小實際上並沒有改變)
- 降級到ruby1.9.2/rails3.1.3,得到了相同的消息
- 同樣的錯誤的Windows 下
應用程序上下文:
我正在寫一個應用程序,大量使用紅寶石混搭。
除此之外,我創建了一堆生成mixins(其他類包含的實例/類方法模塊)的類。
因此,總而言之,我最終生成了一些具有一些自定義生成代碼的生成命名模塊,以及具有許多祖先的類。
但是,當我編寫位於該lib之上的程序時(這是該計劃),最終應該爲我節省相當多的痛苦。
資源我用:
- How to increase stack size for a ruby app. Recursive app getting: Stack level too deep (SystemStackError)
- http://dalibornasevic.com/posts/5-ruby-stack-level-too-deep-systemstackerror
編輯:直到一些代碼可用於顯示/測試,讓抽象的,我的問題到這一個:除了傳統的程序執行樹太深的情況之外,是否還有其他一些提升堆棧級別太深的異常的情況(交叉手指很清楚並且意味着一些東西......)?
非常好的風格和格式。 –
什麼是代碼?如果你沒有代碼顯示,很難提供幫助。 – vgoff
您可能正在遞歸調用沒有終止條件的相同方法。來自Profiler的報告可能會有所幫助https://github.com/rdp/ruby-prof – Tombart