在Ruby中调试堆栈级别太深

在Ruby中调试堆栈级别太深,ruby,stack-overflow,profiler,datamapper,Ruby,Stack Overflow,Profiler,Datamapper,我的ruby程序运行时遇到堆栈级别太深(SystemStackError)错误,以datamapper结束: from /usr/local/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/collection.rb:510:in `each' from /usr/local/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/query/conditions/comparison.rb:616:in

我的ruby程序运行时遇到堆栈级别太深(SystemStackError)错误,以datamapper结束:

from /usr/local/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/collection.rb:510:in `each'
from /usr/local/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/query/conditions/comparison.rb:616:in `map'
from /usr/local/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/query/conditions/comparison.rb:616:in `expected'
from /usr/local/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/query/conditions/comparison.rb:461:in `matches?'
from /usr/local/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/query/conditions/operation.rb:498:in `matches?'
from /usr/local/lib/ruby/gems/1.8/gems/extlib-0.9.15/lib/extlib/inflection.rb:103:in `any?'
from /usr/local/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/query/conditions/operation.rb:159:in `each'
from /usr/local/lib/ruby/1.8/set.rb:195:in `each'
 ... 5188 levels...

有办法调试它吗?比如看隐藏的5188层?Ruby debug无法帮助我,内置Ruby profiler死于“[FATAL]分配内存失败”

问题是,除了找不到能够处理堆栈溢出的Ruby profiler之外,还滥用了Datamapper lazyness

该应用程序在一个查询(也是惰性的)中获取一个文本属性(),在另一个查询()中获取。尽管所有这些懒散通常会将一个N+1查询变成一个O(k)查询(实际上通常意味着4个查询),但这最终会导致堆栈溢出

在rake、rspec和netbeans环境之外,作为一个简单的ruby脚本执行溢出测试,使我能够更清楚地看到罪魁祸首


仍然希望ruby分析器能帮我解决这个问题。

除了找不到能够处理堆栈溢出的ruby分析器外,问题在于滥用Datamapper懒散

该应用程序在一个查询(也是惰性的)中获取一个文本属性(),在另一个查询()中获取。尽管所有这些懒散通常会将一个N+1查询变成一个O(k)查询(实际上通常意味着4个查询),但这最终会导致堆栈溢出

在rake、rspec和netbeans环境之外,作为一个简单的ruby脚本执行溢出测试,使我能够更清楚地看到罪魁祸首


仍然希望ruby Profiler能帮我解决这个问题。

如果你有5188个级别,你可能有某种无限递归。也称为堆栈溢出!如果你有5188个级别,你可能有某种无限递归。也称为堆栈溢出!谢谢,至少我知道发生了什么事!一个星期都想不出来!非常感激,谢谢。谢谢,至少我知道发生了什么事!一个星期都想不出来!非常感谢,谢谢。