【发布时间】:2015-04-15 09:25:07
【问题描述】:
我正在开发一个使用线程的 ruby 应用程序。我很难调试它。主要问题是我想单步执行一个特定的线程。我设置了断点并运行,但在我使用thr sw 2 之类的东西之前什么都没有发生。但是随后的输入是FUBAR'd。我尝试过 pry,但 pry 似乎并不擅长处理线程。
解决方案?变通方法?
编辑 1:
仅供参考:Pry version 0.10.1 on Ruby 2.0.0 和 byebug
这就是我对 Pry 的体验。尝试1:我使用break设置线程特定断点
- 让程序运行。
- 断点被触发。
- Pry 正确地显示了断点和周围的代码。
- 现在什么都没有。 我没有提示。控制-C 不起作用。事实上,我必须从外部杀死 -9 进程。
尝试 2:使用上面的“binding.pry”方法。
- 一样
- 一样
- 一样!
- 我收到一个 Pry 提示!我可以产生表达式。
- 我尝试使用“step”或“next”,但突然间我进入了“Pry::history#load”。所以现在调试器已经跳转到处理输入本身的线程。这不起作用。
撬出输出:
[2] pry(#<QDS::Node::Primary>)> step
From: /usr/local/rvm/gems/ruby-2.0.0-p598/gems/pry-0.10.1/lib/pry/history.rb @ line 37 Pry::History#load:
35: def load
36: @loader.call do |line|
=> 37: @pusher.call(line.chomp)
38: @history << line.chomp
39: @original_lines += 1
40: end
41: end
[2] pry(#<Pry::History>)>
- 我尝试“退出”,现在我在“pry(main)”,没有任何其他工作。
撬出输出:
[1] pry(main)> continue
Error: Cannot find local context. Did you use `binding.pry`?
【问题讨论】:
-
我无法获取降价格式以正确地将 ruby 输出显示为代码。我不知道为什么。
标签: ruby multithreading debugging