I am developing a ruby application which uses threads. I am having difficulty debugging it. The main problem is that I want to step through a particular thread. I set the breakpoint and run, but nothing happens until I use something like thr sw 2
. But then subsequent input is FUBAR'd. I have tried pry, but pry seems no better at dealing with threads.
Solutions? Work-arounds?
EDIT 1:
FYI: Pry version 0.10.1 on Ruby 2.0.0
with byebug
So here is what I experience with Pry. Try 1:I set the thread-specific breakpoint using break
- Let program run.
- Breakpoint is triggered.
- Pry correctly shows me the breakpoint and surrounding code.
- Now nothing. I have no prompt. Control-C doesn't work. In fact, I have to kill -9 the process from outside.
Try 2: Using the "binding.pry" method above.
- same
- same
- same!
- I get a Pry prompt! I can yield expressions.
- I try to use "step" or "next" and suddenly I'm in "Pry::history#load" . So now the debugger has jumped to the thread that is processing the input itself. This is not functional.
Pry output:
[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>)>
- I try "exit" and now I'm at "pry(main)" without anything else working.
Pry output:
[1] pry(main)> continue
Error: Cannot find local context. Did you use `binding.pry`?