From: "sam.saffron (Sam Saffron)" Date: 2012-11-27T07:35:54+09:00 Subject: [ruby-core:50182] [ruby-trunk - Feature #7434] Allow caller_locations and backtrace_locations to receive negative params Issue #7434 has been updated by sam.saffron (Sam Saffron). This is a "typical" caller trace for a rails app: app/controllers/list_controller.rb:8:in `block (2 levels) in ' actionpack (3.2.9) lib/action_controller/metal/implicit_render.rb:4:in `send_action' actionpack (3.2.9) lib/abstract_controller/base.rb:167:in `process_action' actionpack (3.2.9) lib/action_controller/metal/rendering.rb:10:in `process_action' actionpack (3.2.9) lib/abstract_controller/callbacks.rb:18:in `block in process_action' activesupport (3.2.9) lib/active_support/callbacks.rb:447:in `_run__315638444__process_action__306812856__callbacks' activesupport (3.2.9) lib/active_support/callbacks.rb:405:in `__run_callback' activesupport (3.2.9) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks' activesupport (3.2.9) lib/active_support/callbacks.rb:81:in `run_callbacks' actionpack (3.2.9) lib/abstract_controller/callbacks.rb:17:in `process_action' actionpack (3.2.9) lib/action_controller/metal/rescue.rb:29:in `process_action' actionpack (3.2.9) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action' activesupport (3.2.9) lib/active_support/notifications.rb:123:in `block in instrument' activesupport (3.2.9) lib/active_support/notifications/instrumenter.rb:20:in `instrument' activesupport (3.2.9) lib/active_support/notifications.rb:123:in `instrument' actionpack (3.2.9) lib/action_controller/metal/instrumentation.rb:29:in `process_action' actionpack (3.2.9) lib/action_controller/metal/params_wrapper.rb:207:in `process_action' activerecord (3.2.9) lib/active_record/railties/controller_runtime.rb:18:in `process_action' actionpack (3.2.9) lib/abstract_controller/base.rb:121:in `process' actionpack (3.2.9) lib/abstract_controller/rendering.rb:45:in `process' /home/sam/.rvm/gems/ruby-1.9.3-p194-perf/bundler/gems/MiniProfiler-cf359967ec7b/Ruby/lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method' actionpack (3.2.9) lib/action_controller/metal.rb:203:in `dispatch' actionpack (3.2.9) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch' actionpack (3.2.9) lib/action_controller/metal.rb:246:in `block in action' actionpack (3.2.9) lib/action_dispatch/routing/route_set.rb:73:in `call' actionpack (3.2.9) lib/action_dispatch/routing/route_set.rb:73:in `dispatch' actionpack (3.2.9) lib/action_dispatch/routing/route_set.rb:36:in `call' journey (1.0.4) lib/journey/router.rb:68:in `block in call' journey (1.0.4) lib/journey/router.rb:56:in `each' journey (1.0.4) lib/journey/router.rb:56:in `call' actionpack (3.2.9) lib/action_dispatch/routing/route_set.rb:601:in `call' vendor/gems/message_bus/lib/message_bus/rack/middleware.rb:42:in `call' sass (3.2.3) lib/sass/plugin/rack.rb:54:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call' rack (1.4.1) lib/rack/etag.rb:23:in `call' rack (1.4.1) lib/rack/conditionalget.rb:25:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/head.rb:14:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/params_parser.rb:21:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/flash.rb:242:in `call' rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context' rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/cookies.rb:341:in `call' activerecord (3.2.9) lib/active_record/query_cache.rb:64:in `call' activerecord (3.2.9) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call' activesupport (3.2.9) lib/active_support/callbacks.rb:405:in `_run__769637742__call__1054697050__callbacks' activesupport (3.2.9) lib/active_support/callbacks.rb:405:in `__run_callback' activesupport (3.2.9) lib/active_support/callbacks.rb:385:in `_run_call_callbacks' activesupport (3.2.9) lib/active_support/callbacks.rb:81:in `run_callbacks' actionpack (3.2.9) lib/action_dispatch/middleware/callbacks.rb:27:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/reloader.rb:65:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/remote_ip.rb:31:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' railties (3.2.9) lib/rails/rack/logger.rb:32:in `call_app' railties (3.2.9) lib/rails/rack/logger.rb:16:in `block in call' activesupport (3.2.9) lib/active_support/tagged_logging.rb:22:in `tagged' railties (3.2.9) lib/rails/rack/logger.rb:16:in `call' config/initializers/quiet_logger.rb:10:in `call_with_quiet_assets' config/initializers/silence_logger.rb:19:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/request_id.rb:22:in `call' rack (1.4.1) lib/rack/methodoverride.rb:21:in `call' rack (1.4.1) lib/rack/runtime.rb:17:in `call' activesupport (3.2.9) lib/active_support/cache/strategy/local_cache.rb:72:in `call' actionpack (3.2.9) lib/action_dispatch/middleware/static.rb:62:in `call' airbrake (3.1.2) lib/airbrake/rack.rb:42:in `call' airbrake (3.1.2) lib/airbrake/user_informer.rb:12:in `call' /home/sam/.rvm/gems/ruby-1.9.3-p194-perf/bundler/gems/MiniProfiler-cf359967ec7b/Ruby/lib/mini_profiler/profiler.rb:310:in `call' railties (3.2.9) lib/rails/engine.rb:479:in `call' railties (3.2.9) lib/rails/application.rb:223:in `call' railties (3.2.9) lib/rails/railtie/configurable.rb:30:in `method_missing' thin (1.5.0) lib/thin/connection.rb:81:in `block in pre_process' thin (1.5.0) lib/thin/connection.rb:79:in `catch' thin (1.5.0) lib/thin/connection.rb:79:in `pre_process' thin (1.5.0) lib/thin/connection.rb:54:in `process' /home/sam/.rvm/gems/ruby-1.9.3-p194-perf/bundler/gems/thin-em-websocket-5aa856511441/lib/thin-em-websocket.rb:258:in `process' thin (1.5.0) lib/thin/connection.rb:39:in `receive_data' /home/sam/.rvm/gems/ruby-1.9.3-p194-perf/bundler/gems/thin-em-websocket-5aa856511441/lib/thin-em-websocket.rb:269:in `receive_data' eventmachine (1.0.0) lib/eventmachine.rb:187:in `run_machine' eventmachine (1.0.0) lib/eventmachine.rb:187:in `run' thin (1.5.0) lib/thin/backends/base.rb:63:in `start' thin (1.5.0) lib/thin/server.rb:159:in `start' thin (1.5.0) lib/thin/controllers/controller.rb:86:in `start' thin (1.5.0) lib/thin/runner.rb:187:in `run_command' thin (1.5.0) lib/thin/runner.rb:152:in `run!' thin (1.5.0) bin/thin:6:in `' /home/sam/.rvm/gems/ruby-1.9.3-p194-perf/bin/thin:19:in `load' /home/sam/.rvm/gems/ruby-1.9.3-p194-perf/bin/thin:19:in `
' /home/sam/.rvm/gems/ruby-1.9.3-p194-perf/bin/ruby_noexec_wrapper:14:in `eval' /home/sam/.rvm/gems/ruby-1.9.3-p194-perf/bin/ruby_noexec_wrapper:14:in `
' This means that there are 60 or so frames below my application. If I just want to gather a trace for my application code, I really want: caller_locations(0, -60) ... I work around by doing caller_locations[0..-60] however the VM is going to do tons of work to grab all these objects just for me to discard them. ---------------------------------------- Feature #7434: Allow caller_locations and backtrace_locations to receive negative params https://bugs.ruby-lang.org/issues/7434#change-33985 Author: sam.saffron (Sam Saffron) Status: Assigned Priority: Normal Assignee: ko1 (Koichi Sasada) Category: core Target version: next minor Further to http://bugs.ruby-lang.org/issues/7051 It would be nice if caller_locations and backtrace_locations has some parity with range apis. pry(main)> [1,2,3][0..-2] => [1, 2] Similarly: caller_locations(0,-2) # should strip the bottom frame This is actually quite important for diagnostics of Rails and other frameworks where the app code starts at a very deep frame. At the moment you are forced to materialize all frames just to discard. -- http://bugs.ruby-lang.org/