新手问题 初级小鸟,关于调试问题再来请教各位前辈

w_jie · 2013年07月15日 · 最后由 w_jie 回复于 2013年07月17日 · 5047 次阅读

刚接触 ruby,目前看别人写的代码,感觉在调试上很没方向,有时候在一些代码上用 puts 能打印出我想要看的值,有时候加了 puts 无用。想问问各位前辈是怎么对程序进行调试的?想弄个方便的调试方法,来边调试边看程序。 对这里的帖子和资料还不熟,没找到关于调试的文章,在网上搜了一下,看到有提到 ruby-debug。但是没找到很适合我这种菜鸟级别学习安装的文章。这里的前辈能指点我一下,或者给我个连接看看么?

是不是安装这个需要按下面的步骤?

一 下载 ruby-debug-base 安装

二 再下载 ruby-debug-ide 安装

三 最后安装 ruby-debug

可以看看测试怎么写,如果目标明确的话,测试驱动开发是不错的选择 http://ruby-doc.org/stdlib-1.9.3/libdoc/test/unit/rdoc/Test/Unit/Assertions.html

#1 楼 @chinakr 谢谢你的回复,你给的这个链接,我先收藏先,慢慢学习,对于目前我的水平,这个帖子对我还有点深。 我现在想要的东西是能像一些开发工具那样,能对代码进行单步调试的,因为要修改代码,想用这种调试工具应该要比我现在无头苍蝇般的瞎 puts 好一些。😦

#3 楼 @Rei 推荐 rubymine

控制台的可以看下 pry

puts 打不出来可以试试 $stderr.puts

或者可能已经都被重定向到日志里了

binding.pry 比 debug 好用

#5 楼 @luikore 有一次插完忘记拔出来了..

#6 楼 @hooopo 只在 development group 依赖就好,最多报个异常不会堵住...

#7 楼 @luikore 仔细想想 堵住比异常可怕!

#5 楼 @luikore 看你帖子上说的 $stderr.puts 我试了一下,还是打印不出来,你说的重定向到日志,怎么找这个日志文件?

#4 楼 @heliang7 你帖子上指的控制台 是不是是我现在用来看 puts 结果的地方?

#9 楼 @w_jie 到 log 目录里看看?或者 puts 被重写了,或者那行代码根本就没被调用到

#11 楼 @luikore log 目录下有个文件时间是最新的,打开看里面的内容就和我前面贴出来的图上的 cmd 窗口的内容一致。

你说的“插 binding.pry 比 debug 好用”,能在说的详细些么,我还没理解。:$

#3 楼 @Rei 谢谢你,我这里用 chrome 打开你发的这个网站很慢很慢。不知道怎么回事。

#10 楼 @w_jie 是滴。提示下,远离 windows。

#15 楼 @heliang7 “远离 windows”?为何?

应该加个节点叫“十万个为什么”

#17 楼 @hooopo 为什么呢?

#13 楼 @blacktulip 谢谢你的帮助,你发的这个链接是怎么安装和使用 pry 的介绍是吧,我在我的机器上用 执行了开头的两个命令,出现这样的信息,是不是表示我机器上还没有 pry?

C:\Sites\redmine-2.3.0>gem install pry pry-doc WARNING: Error fetching data: too many connection resets (http://production.s3. rubygems.org/specs.4.8.gz) Fetching: slop-3.4.4.gem (100%) Fetching: method_source-0.8.1.gem (100%) Fetching: win32console-1.3.2-x86-mingw32.gem (100%) Fetching: pry-0.9.12.2-i386-mingw32.gem (100%) Successfully installed slop-3.4.4 Successfully installed method_source-0.8.1 Successfully installed win32console-1.3.2-x86-mingw32 Successfully installed pry-0.9.12.2-x86-mingw32 Fetching: yard-0.8.6.2.gem (100%) Fetching: pry-doc-0.4.6.gem (100%) Successfully installed yard-0.8.6.2 Successfully installed pry-doc-0.4.6 6 gems installed Installing ri documentation for slop-3.4.4... Installing ri documentation for method_source-0.8.1... unable to convert "\xE2" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/method_source.rb, skipping Installing ri documentation for win32console-1.3.2-x86-mingw32... Installing ri documentation for pry-0.9.12.2-x86-mingw32... unable to convert "\xE2" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry/terminal.rb, skipping Installing ri documentation for yard-0.8.6.2... Installing ri documentation for pry-doc-0.4.6... unable to convert "\x8D" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_18/object_types, skipping unable to convert "\x9A" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_19/object_types, skipping unable to convert "\xED" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_20/object_types, skipping Installing RDoc documentation for slop-3.4.4... Installing RDoc documentation for method_source-0.8.1... unable to convert "\xE2" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/method_source.rb, skipping Installing RDoc documentation for win32console-1.3.2-x86-mingw32... Installing RDoc documentation for pry-0.9.12.2-x86-mingw32... unable to convert "\xE2" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry/terminal.rb, skipping Installing RDoc documentation for yard-0.8.6.2... Installing RDoc documentation for pry-doc-0.4.6... unable to convert "\x8D" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_18/object_types, skipping unable to convert "\x9A" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_19/object_types, skipping unable to convert "\xED" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_20/object_types, skipping

C:\Sites\redmine-2.3.0>rvm gemset use global 'rvm' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

C:\Sites\redmine-2.3.0>

#14 楼 @w_jie 这个网站本身是正常的,可能页面上有资源被墙了,解决方法就是翻墙。

#17 楼 @hooopo 你的意思,我问的一系列问题太菜了?

#21 楼 @w_jie 你的问题太多了..

#16 楼 @w_jie 因为像 #19 楼 那个错误,就是因为 rvm 不能在 windows 下面跑

#22 楼 @hooopo 水平低,所以。。。 看在女流之辈的份上,请多多包涵。

#22 楼 @hooopo 话说<<十万个为什么>>略夸大其辞,里面的问题没有十万个...

#24 楼 @w_jie 放心随便问,大家会抢着给你辅导的...

#23 楼 @luikore 哦,这下明白 heliang7 为啥说远离 windows 了,那是不是也就意味着 pry 不能在 windows 下用?

#27 楼 @w_jie 不清楚... 但你这个 pry 已经装上了吧?

#6 楼 @hooopo 加个 commit hook 做下检查

#28 楼 @luikore 路径下是有几个新生成的文件夹。

是安装的时候,开头出现的那句话 WARNING: Error fetching data: too many connection resets (http://production.s3. rubygems.org/specs.4.8.gz) 还有安装过程中出现的类似语句对整体有影响么?

unable to convert "\x8D" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_18/object_types, skipping unable to convert "\x9A" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_19/object_types, skipping unable to convert "\xED" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to GBK for lib/pry-doc/core_docs_20/object_types, skipping

#30 楼 @w_jie 那是和 rubygems.org 连接不稳定... 可以试试设置成淘宝源 (Gemfile 里写 source 'http://ruby.taobao.org')

调试用 pry 操作系统 用 Linux or Mac 慢慢学 别着急

#32 楼 @ery 用 windows 系统是不是就不能用 pry 调试?要把 ruby 学好还要学会用 linux,看来是个大学问。

#31 楼 @luikore 谢谢你,照你说的改了^_^

#20 楼 @Rei 你昨天发给我的那个 IDE 地址,里面是不是有工具下载,这个工具大么?你手上有么?方便发给我么?

楼主想要的是在 View 里 debug 吗? <%= debug current_user %> ,这个有点类似 PHP 下的 var_dump。

#36 楼 @_samqiu php 我没接触过,所以领会不深,我在一个 view 页面里面的代码头部加了一下你给的语句,报错信息如下:

Started GET "/wktime/edit?project_Id=2&startday=2013-04-21&tab=wktime&user_id=3" for 127.0.0.1 at 2013-07-16 11:34:56 +0800 Processing by WktimeController#edit as HTML Parameters: {"project_Id"=>"2", "startday"=>"2013-04-21", "tab"=>"wktime", "user_id"=>"3"} Current user: xwj (id=5) Rendered plugins/redmine_wktime/app/views/wktime/edit.html.erb within layouts/base (46.9ms) Completed 500 Internal Server Error in 297ms

ActionView::Template::Error (undefined local variable or method current_user' for #<#<Class:0x39bab70>:0x3ea60a8>): 1: <%= debug current_user %> 2: 3: <%= stylesheet_link_tag 'wk-time', :plugin => "redmine_wktime" %> 4: plugins/redmine_wktime/app/views/wktime/edit.html.erb:1:inplugins_redmine_wktime_app_views_wktime_edit_html_erb__393893685_32842176' actionpack (3.2.13) lib/action_view/template.rb:145:in block in render' activesupport (3.2.13) lib/active_support/notifications.rb:125:ininstrument' actionpack (3.2.13) lib/action_view/template.rb:143:in `render'

你给的这句话的添加是不是有讲究的?

#37 楼 @w_jie 看来是在给 Redmine 写插件阿,把 <%= debug current_user %> 里的 current_user 换成你想要打印的变量。

#38 楼 @_samqiu 一眼就被你看出来了,Redmine 你也接触过?^_^

#39 楼 @w_jie 程序员都有观察和分析能力,看你自己贴出来的信息

plugins/redmine_wktime/app/views/wktime/edit.html.erb:1:in_plugins_redmine_wktime_app_views_wktime_edit_html_erb___393893685_32842176'

#40 楼 @fsword 嗯,我知道我的信息里面能看出来,我@_samqiu 是想问问他是不是曾经接触过,有点他乡遇故知的感觉。

#42 楼 @_samqiu 你写过啊,如果你有空也方便的话交流交流,多多指点。

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