在Ruby中调试堆栈级别太深

Dan*_*iro 1 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 `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...
Run Code Online (Sandbox Code Playgroud)

有没有办法调试它?喜欢调查隐藏的5188级别?Ruby-debug无法帮助我,内置的ruby探测器因"[FATAL]无法分配内存而死"

Dan*_*iro 5

问题是,除了找不到可以处理堆栈溢出的ruby剖析器之外,还在滥用Datamapper的懒惰

该应用程序是越来越text属性(这是懒惰的),在查询内部(这也是懒惰),另一个查询内(这是懒惰和).尽管所有这些懒惰通常将N + 1查询转换为O(k)查询(实际上通常意味着4个查询),但结果却产生了堆栈溢出.

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

仍然希望红宝石剖面仪可以帮助我.