首页 文章

在Ruby中调试堆栈级别太深

提问于
浏览
1

我有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探测器因“[FATAL]无法分配内存而死”

1 回答

  • 5

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

    应用程序在另一个查询(which is lazy as well)内的查询(也是惰性)中获取文本属性(which is lazy) . 即使所有这些懒惰通常将N 1查询转换为O(k)查询(实际上通常意味着4个查询),但结果是生成堆栈溢出 .

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

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

相关问题