pry-byebug icon indicating copy to clipboard operation
pry-byebug copied to clipboard

pry-backtrace does not filter out gems / ruby code.

Open marko-avlijas opened this issue 8 years ago • 4 comments

Take a look at result of pry-backtrace It contains 2 useful lines of code, hidden within 30 something lines.

[5] pry(Settings)> pry-backtrace
Backtrace:
--
/home/marko/.gem/ruby/2.3.1/gems/pry-byebug-3.4.2/lib/byebug/processors/pry_processor.rb:115:in `block in resume_pry'
/home/marko/.gem/ruby/2.3.1/gems/pry-byebug-3.4.2/lib/byebug/processors/pry_processor.rb:28:in `block in run'
/home/marko/.gem/ruby/2.3.1/gems/pry-byebug-3.4.2/lib/byebug/processors/pry_processor.rb:27:in `catch'
/home/marko/.gem/ruby/2.3.1/gems/pry-byebug-3.4.2/lib/byebug/processors/pry_processor.rb:27:in `run'
/home/marko/.gem/ruby/2.3.1/gems/pry-byebug-3.4.2/lib/byebug/processors/pry_processor.rb:111:in `resume_pry'
/home/marko/.gem/ruby/2.3.1/gems/pry-byebug-3.4.2/lib/byebug/processors/pry_processor.rb:63:in `at_line'
/home/marko/.gem/ruby/2.3.1/gems/byebug-9.0.6/lib/byebug/context.rb:96:in `at_line'
/data/sites/scripts/sw_scripts/ruby/common/lib/settings.rb:11:in `set_sw_dir'
/data/sites/scripts/sw_scripts/ruby/gallery/spec/lib/html/support/collection_page_creator.rb:6:in `block (2 levels) in <top (required)>'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:443:in `instance_exec'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:443:in `instance_exec'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:350:in `run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:507:in `block in run_owned_hooks_for'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:506:in `each'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:506:in `run_owned_hooks_for'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:593:in `block in run_example_hooks_for'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:592:in `reverse_each'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:592:in `run_example_hooks_for'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:462:in `run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:490:in `run_before_example'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:253:in `block in run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:496:in `block in with_around_and_singleton_context_hooks'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:453:in `block in with_around_example_hooks'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:464:in `block in run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:602:in `run_around_example_hooks_for'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/hooks.rb:464:in `run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:453:in `with_around_example_hooks'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:496:in `with_around_and_singleton_context_hooks'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example.rb:251:in `run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example_group.rb:627:in `block in run_examples'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example_group.rb:623:in `map'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example_group.rb:623:in `run_examples'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example_group.rb:589:in `run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example_group.rb:590:in `block in run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example_group.rb:590:in `map'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/example_group.rb:590:in `run'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:113:in `block (3 levels) in run_specs'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:113:in `map'
/home/marko/.gem/ruby/2.3.1/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:113:in `block (2 levels) in run_specs'

To fix, just filter out all links starting with ruby's gem path.

marko-avlijas avatar Jan 18 '17 12:01 marko-avlijas

pry-backtrace is a command defined in gem pry, not pry-byebug

you can modify the file lib/pry/commands/pry_backtrace.rb in pry

#    def process
#      _pry_.pager.page text.bold('Backtrace:') << "\n--\n" << _pry_.backtrace.join("\n")
#    end

    def process
      _pry_.pager.page text.bold('Backtrace:') <<  "\n--\n" <<  _pry_.backtrace.reject { |line| /gems/ === line }.join("\n")
    end

yiichou avatar Feb 28 '18 06:02 yiichou

Actually the command is defined in byebug gem:

    def print_backtrace
      bt = prc('frame.line', (0...context.stack_size)) do |_, index|
        Frame.new(context, index).to_hash
      end

      print(bt)
    end

If you monkey patch it to the code below, you'll get what you want:

    def print_backtrace
      relevant_context = (0...context.stack_size).reject { |index| context.frame_file(index) =~ /(.gem\/ruby)|(.rubies\/ruby)/  }
      bt = prc('frame.line', relevant_context) do |index, _|
        Frame.new(context, index).to_hash
      end

      print(bt)
    end

leandrogoe avatar Aug 22 '18 22:08 leandrogoe

Actually the command is defined in byebug gem:

    def print_backtrace
      bt = prc('frame.line', (0...context.stack_size)) do |_, index|
        Frame.new(context, index).to_hash
      end

      print(bt)
    end

If you monkey patch it to the code below, you'll get what you want:

    def print_backtrace
      relevant_context = (0...context.stack_size).reject { |index| context.frame_file(index) =~ /(.gem\/ruby)|(.rubies\/ruby)/  }
      bt = prc('frame.line', relevant_context) do |index, _|
        Frame.new(context, index).to_hash
      end

      print(bt)
    end

hey @leandrogoe, I tried monkey patching your code to the byebug gem in the where.rb script, and I saw no difference in my output. Is there something else one has to do in order to get the gem modifications to work?

fierytortilla avatar Mar 08 '20 18:03 fierytortilla

Actually the command is defined in byebug gem:

    def print_backtrace
      bt = prc('frame.line', (0...context.stack_size)) do |_, index|
        Frame.new(context, index).to_hash
      end

      print(bt)
    end

If you monkey patch it to the code below, you'll get what you want:

    def print_backtrace
      relevant_context = (0...context.stack_size).reject { |index| context.frame_file(index) =~ /(.gem\/ruby)|(.rubies\/ruby)/  }
      bt = prc('frame.line', relevant_context) do |index, _|
        Frame.new(context, index).to_hash
      end

      print(bt)
    end

hey @leandrogoe, I tried monkey patching your code to the byebug gem in the where.rb script, and I saw no difference in my output. Is there something else one has to do in order to get the gem modifications to work?

@fierytortilla it's not part of this gem. It's on byebug gem instead.

module Byebug
  module Backtrace
    def print_backtrace
      # your code
    end
  end
end

leandrogoe avatar Mar 19 '20 21:03 leandrogoe