Ruby 请问大家用什么来进行 Ruby 的 debug

whitecrow · 2012年05月21日 · 最后由 reterclose 回复于 2012年06月05日 · 15258 次阅读

我以前用的 rubymine,想换到 sublime text2 上来,请大家推荐点 debug 的 gem 或者插件 ^_^ 多谢。

官网指南已经有 debug 一章了,LZ 不妨关注下吧。 个人 debug 还是喜欢 rubymine。

不用 rubymine 估计得 logger 和 puts。手动 debug 没玩过,不知道方便不方便。

gem 'ruby-debug19' 人肉的。。。

gem install 'debugger' 官方网站 https://github.com/cldwalker/debugger

pry 好像比 debug19 好用些

匿名 #7 2012年05月21日

debug 还是 IDE 方便,显示的信息多。

只会用pputs

#1 楼 @heliang7 你的 rubymine 是购买的正版吗?

ruby-debug 19, 虽然很少用,不过现在越来越喜欢这种命令行式的调试方式了。简单,直观,高效。

#9 楼 @allengaller 天朝唯一的好处,有码。不过现在 sublime text 或者 gvim 了。

pry 用于调试 rails 很好用,ruby 项目还未怎么用过。

多谢大家,综合一下,rails 就用 pry,ruby 就 ruby-debug19 勒~~ ^_^

ruby-debug

写 test 做 debug 最方便。

命令行 debug 工具很 OK 啊

rails 有时用 ruby-debug19, 多数使用 p

1.8 用 ruby-debug, 1.9 用 debugger,其实都一样; pry 好像要多加一个 gem 才能放 break point 吧?

以前用 netbean 做 debug 换成 sublime text 后用 ruby-debug 后来发现了 pry

就彻底放弃了 ruby-debug 一直在使用 pry

我觉得 pry 很好用 虽然不能像 debug 那样一步步跟进, 但是用于查看系统某一个时段的状态,非常的方便

自从用了 pry 以后,就没用别的

求教各位,在程序里写 binding.pry 然后后台的 pry 不弹中断是为什么呢?我单独运行 pry -r ./config/environment 都是没问题的…… 我用的是 Ubuntu 虚拟机+Passenger+Nginx @ery @pzgz @bluebu @davidqhr @azhao

pry 也可以用于非 Rails 的 Ruby 程序耶 ^_^ 就它勒~~

#24 楼 @hexawing passenger 是后台运行的,可以用--debug 吗?
像 thin 是可以 thin start --debug 的

#26 楼 @azhao 好像是不能,我搜到https://github.com/pry/pry/issues/476i这个,但按有人回复里说的,“have same issue, my solution is add pry-remote on your Gemfile, and you should call binding.remote_pry instead binding.pry,” 结果居然还报错,真的跟 Passenger 不兼容么=_=

后台的报错信息是这样的,能顺便帮我看看么……

terrychen@ubuntu:~$ pry-remote
/usr/lib/ruby/1.8/drb/drb.rb:736:in `open': druby://localhost:9876 - #<Errno::ECONNREFUSED: Connection refused - connect(2)> (DRb::DRbConnError)
    from /usr/lib/ruby/1.8/drb/drb.rb:729:in `each'
    from /usr/lib/ruby/1.8/drb/drb.rb:729:in `open'
    from /usr/lib/ruby/1.8/drb/drb.rb:1191:in `initialize'
    from /usr/lib/ruby/1.8/drb/drb.rb:1171:in `new'
    from /usr/lib/ruby/1.8/drb/drb.rb:1171:in `open'
    from /usr/lib/ruby/1.8/drb/drb.rb:1087:in `method_missing'
    from /usr/lib/ruby/1.8/drb/drb.rb:1105:in `with_friend'
    from /usr/lib/ruby/1.8/drb/drb.rb:1086:in `method_missing'
    from /usr/lib/ruby/gems/1.8/gems/pry-remote-0.1.4/lib/pry-remote.rb:186:in `run'
    from /usr/lib/ruby/gems/1.8/gems/pry-remote-0.1.4/bin/pry-remote:4
    from /usr/bin/pry-remote:19:in `load'
    from /usr/bin/pry-remote:19

个人觉得调试的时候直接用 thin 或 mongrel 就行了,为什么要花时间去研究 passenger 怎么调试?

#24 楼 @hexawing 很抱歉,我仅仅在开发环境下使用 pry,我没在 Passenger+Nginx 环境下 使用过 pry

@azhao @ery 好吧,那改成问 thin 的问题……

我运行thin start -e development -D,然后被提示说这个:

terrychen@ubuntu:~/EIMV4$ thin start -e development -p 80 -D
>> Using rack adapter
/usr/lib/ruby/gems/1.8/gems/bundler-1.1.3/lib/bundler/runtime.rb:31:in `setup': You have already activated rack 1.4.1, but your Gemfile requires rack 1.2.3. Using bundle exec may solve this. (Gem::LoadError)

看意思是说我的 rack 版本不对,但这时候我删掉 1.2.3 的那个的话,提示我运行 bundle install;如果我删掉 1.4.1 的话,又提示我有 actionpack 需要 1.4 以上版本

You have requested to uninstall the gem:
    rack-1.4.1
rack-mount-0.6.14 depends on [rack (>= 1.0.0)]
actionpack-3.2.3 depends on [rack (~> 1.4.0)]

这时候我要怎么办才对呢…… 附上我的 gemfile:

source 'http://rubygems.org'

gem 'rails', '3.0.4'

gem 'mysql2', '0.2.6'

gem 'thin'
gem 'mini_magick', '3.2'
gem "prawn", :path => 'vendor/prawn'
gem "will_paginate"
gem "pry-rails", :group => :development

咬牙把 rails 升级成了 3.2.3,倒是可以调出 pry 了,但现在的问题貌似变成了连不上数据库……

[3] pry(#<VendorsController>)> User.all
NoMethodError: undefined method `accept' for nil:NilClass
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `to_sql'

终于搞定了,bundle 不熟的问题…… 再次感谢各位

匿名 #34 2012年05月30日

4 年前用 ruby-debug 挺爽的,后来就没再用了,貌似没这需要,有啥不确定就直接 logger.info("----"), 然后看 log

动态语言 debug 还不如直接 Log。。

没试过单步的,都是 p 或者 puts 出来。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号