如何使用PRY逐步执行循环并在终端会话中查看迭代器的值?

时间:2016-10-21 22:42:37

标签: ruby debugging pry

我和" j doe"完全相同。 (原始问题在这里:How to step through a loop with pry and view the value of an iterator?),但问题并没有得到真正回答。我想问一下那些实际上使用Pry进行调试的人解释如何在循环发生时进入循环并评估表达式。

我阅读文档,检查终端中的帮助文件,观看YouTubes但遗憾的是我没有得到它。有几次我能够进入循环中#34;我想是偶然的。 我有什么:

  • 我使用单个ruby文件,
  • 在我的系统上我以前安装过gems byebug (8.2.1, 3.5.1, 3.4.0); pry (0.10.3, 0.10.1)pry-rails (0.3.4, 0.3.2)
  • 我在脚本的顶部有require 'pry'并且
  • 我使用binding.pry来设置断点。

这是我在终端中使用包含的问题中的示例所做的。我到目前为止,但我的下一步是什么?我如何使下一步完成循环并查看我观察的变量值?

Last login: Thu Oct 20 18:21:07 on ttys000
INB:~ LearnEnough$ pry
[1] pry(main)> def longest_palindrome s
[1] pry(main)*   max_palindrome_len = 0
[1] pry(main)*   for i in (0..s.length)
[1] pry(main)*     binding.pry
[1] pry(main)*     for j in (i..s.length)
[1] pry(main)*       binding.pry
[1] pry(main)*       substr = s[i..j]
[1] pry(main)*       if substr == substr.reverse && substr.length >     max_palindrome_len

[1] pry(main)*         max_palindrome_len = substr.length
[1] pry(main)*       end
[1] pry(main)*     end
[1] pry(main)*   end
[1] pry(main)*   return max_palindrome_len
[1] pry(main)* end
=> :longest_palindrome
[2] pry(main)> longest_palindrome "racer"

From: (pry) @ line 4 Object#longest_palindrome:

     1: def longest_palindrome s
     2:   max_palindrome_len = 0
     3:   for i in (0..s.length)
 =>  4:     binding.pry
     5:     for j in (i..s.length)
     6:       binding.pry
     7:       substr = s[i..j]
     8:       if substr == substr.reverse && substr.length > max_palindrome_len
     9:         max_palindrome_len = substr.length
    10:       end
    11:     end
    12:   end
    13:   return max_palindrome_len
    14: end

[1] pry(main)> watch i
Watching i
watch: i => 0
[2] pry(main)> watch j
Watching j
watch: j => nil
[3] pry(main)>

1 个答案:

答案 0 :(得分:0)

现在,Ruby不支持

pry-debuggerpry-nav,您需要它们来执行此操作。我需要使用pry-byebug

这是一个关于如何在循环中使用pry的非常简短且有用的视频:

https://youtu.be/dbllOus430c