Bug #17492
closedBreakpoints in debug.rb only work when program invoked with absolute filename
Description
When using the debugger, as in ruby -r debug, it seems that breakpoints sometimes are honoured and sometimes not. It turns out that it matters how the program is invoked.
For example, when debugging test.rb,
if invoked as
ruby -r debug test.rb
or
ruby -r debug test.rb
if a breakpoint is put in as
b test.rb:10
it is not honoured because the set_trace_func has expanded the filename test.rb.
If, however, the program is invoked as
ruby -r debug $PWD/test.rb
then the breakpoint does work.
When the breakpoint is entered a File.expand_path is done on it, as can be seen when using the “b” command to view breakpoints. So a simple fix is to also call File.expand_path in the set_trace_func method.
`bash-5.1$ diff debug.rb{~,}
1104c1104
< DEBUGGER__.context.trace_func event, file, line, id, binding, klass
---
> DEBUGGER__.context.trace_func event, File.expand_path(file), line, id, binding, klass
bash-5.1$
`
Enclosed is a patch and a test script demo.sh to run a program with a breakpoint. Without the fix it does not stop at the breakpoint, with it it does.
Files
Updated by rsharman (Richard Sharman) almost 4 years ago
- Description updated (diff)
Updated by jeremyevans0 (Jeremy Evans) over 3 years ago
I've tested this patch and it does appear to fix the issue. The upstream repository (https://github.com/ruby/debug) is still not created or is private. Since debug has been gemified, a fix should be applied to the upstream repository, but since the upstream repository has not been created, there isn't a place to do that currently. @hsbt (Hiroshi SHIBATA): are there plans to make the upstream repository work?
debug itself uses continuation and therefore warns when it is loaded. It also has no tests. I'm not sure how often it is used (I've never used it before).
Updated by jeremyevans0 (Jeremy Evans) over 3 years ago
- Status changed from Open to Closed
@ko1 (Koichi Sasada) has rewritten the debug library (https://github.com/ruby/debug). I've checked that the rewrite fixes this issue. You can also try using the 1.0.0 beta gem. Note that you need to add require 'debug/run'
to the file use the rdbg
command line tool in order to start the debug console.