2013-04-24 17 views
2

這裏有惱人的我有在鐵軌中的痕跡 - 他們首先打印錯誤,這意味着查看任何錯誤,你有你的termanl向上滾動看看錯誤是什麼。在軌道上打印紅寶石backstraces/stracktraces /錯誤以相反的順序在屏幕上

有沒有一種方法可以按照相反的順序打印錯誤& stracktrace,因此您可以查看錯誤而不必滾動。例如:

這是導軌/紅寶石當前打印stracktraces:

 /activesupport/lib/active_support/dependencies.rb:228:in `require': cannot load such file -- pry (LoadError) 
     from /activesupport/lib/active_support/dependencies.rb:228:in `block in require' 
     from /activesupport/lib/active_support/dependencies.rb:213:in `load_dependency' 
     from /activesupport/lib/active_support/dependencies.rb:228:in `require' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:307:in `normalize_path' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:79:in `normalize_path!' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:65:in `initialize' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:1429:in `new' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:1429:in `add_route' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:1408:in `decomposed_match' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:1389:in `block in match' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:1380:in `each' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:1380:in `match' 
     from /actionpack/lib/action_dispatch/routing/mapper.rb:502:in `mount' 
     from /ruby-2.0.0-p0/bundler/gems/sprockets-rails-bbf755e8b3aa/lib/sprockets/railtie.rb:125:in `block (2 levels) in <class:Railtie>' 
     from /actionpack/lib/action_dispatch/routing/route_set.rb:315:in `instance_exec' 
     from /actionpack/lib/action_dispatch/routing/route_set.rb:315:in `eval_block' 
     from /actionpack/lib/action_dispatch/routing/route_set.rb:330:in `block in clear!' 
     from /actionpack/lib/action_dispatch/routing/route_set.rb:330:in `each' 
     from /actionpack/lib/action_dispatch/routing/route_set.rb:330:in `clear!' 
     from /railties/lib/rails/application/routes_reloader.rb:35:in `block in clear!' 
     from /railties/lib/rails/application/routes_reloader.rb:33:in `each' 
     from /railties/lib/rails/application/routes_reloader.rb:33:in `clear!' 
     from /railties/lib/rails/application/routes_reloader.rb:15:in `reload!' 
     from /railties/lib/rails/application/routes_reloader.rb:26:in `block in updater' 
     from /activesupport/lib/active_support/file_update_checker.rb:75:in `call' 
     from /activesupport/lib/active_support/file_update_checker.rb:75:in `execute' 
     from /railties/lib/rails/application/routes_reloader.rb:27:in `updater' 
     from /railties/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated' 
     from /railties/lib/rails/application/finisher.rb:69:in `block in <module:Finisher>' 
     from /railties/lib/rails/initializable.rb:30:in `instance_exec' 
     from /railties/lib/rails/initializable.rb:30:in `run' 
     from /railties/lib/rails/initializable.rb:55:in `block in run_initializers' 
     from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:150:in `block in tsort_each' 
     from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:183:in `block (2 levels) in each_strongly_connected_component' 
     from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:219:in `each_strongly_connected_component_from' 
     from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:182:in `block in each_strongly_connected_component' 
     from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:180:in `each' 
     from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:180:in `each_strongly_connected_component' 
     from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:148:in `tsort_each' 
     from /railties/lib/rails/initializable.rb:54:in `run_initializers' 
     from /railties/lib/rails/application.rb:214:in `initialize!' 
     from /railties/lib/rails/railtie/configurable.rb:30:in `method_missing' 
     from /demo/config/environment.rb:5:in `<top (required)>' 
     from /demo/config.ru:3:in `require' 
     from /demo/config.ru:3:in `block in <main>' 
     from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval' 
     from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize' 
     from /demo/config.ru:in `new' 
     from /demo/config.ru:in `<main>' 
     from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:49:in `eval' 
     from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:49:in `new_from_string' 
     from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:40:in `parse_file' 
     from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/server.rb:277:in `build_app_and_options_from_config' 
     from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/server.rb:199:in `app' 
     from /railties/lib/rails/commands/server.rb:48:in `app' 
     from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/server.rb:314:in `wrapped_app' 
     from /railties/lib/rails/commands/server.rb:75:in `start' 
     from /railties/lib/rails/commands.rb:80:in `block in <top (required)>' 
     from /railties/lib/rails/commands.rb:75:in `tap' 
     from /railties/lib/rails/commands.rb:75:in `<top (required)>' 
     from bin/rails:4:in `require' 
     from bin/rails:4:in `<main>' 

有沒有辦法讓我能得到與此相反的同一stracktrace,所以我沒有滾動我每次終端我得到一個錯誤。類似的東西:

from bin/rails:4:in `<main>' 
    from bin/rails:4:in `require' 
    from /railties/lib/rails/commands.rb:75:in `<top (required)>' 
    from /railties/lib/rails/commands.rb:75:in `tap' 
    from /railties/lib/rails/commands.rb:80:in `block in <top (required)>' 
    from /railties/lib/rails/commands/server.rb:75:in `start' 
    from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/server.rb:314:in `wrapped_app' 
    from /railties/lib/rails/commands/server.rb:48:in `app' 
    from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/server.rb:199:in `app' 
    from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/server.rb:277:in `build_app_and_options_from_config' 
    from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:40:in `parse_file' 
    from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:49:in `new_from_string' 
    from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:49:in `eval' 
    from /demo/config.ru:in `<main>' 
    from /demo/config.ru:in `new' 
    from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize' 
    from /ruby-2.0.0-p0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval' 
    from /demo/config.ru:3:in `block in <main>' 
    from /demo/config.ru:3:in `require' 
    from /demo/config/environment.rb:5:in `<top (required)>' 
    from /railties/lib/rails/railtie/configurable.rb:30:in `method_missing' 
    from /railties/lib/rails/application.rb:214:in `initialize!' 
    from /railties/lib/rails/initializable.rb:54:in `run_initializers' 
    from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:148:in `tsort_each' 
    from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:180:in `each_strongly_connected_component' 
    from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:180:in `each' 
    from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:182:in `block in each_strongly_connected_component' 
    from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:219:in `each_strongly_connected_component_from' 
    from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:183:in `block (2 levels) in each_strongly_connected_component' 
    from ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:150:in `block in tsort_each' 
    from /railties/lib/rails/initializable.rb:55:in `block in run_initializers' 
    from /railties/lib/rails/initializable.rb:30:in `run' 
    from /railties/lib/rails/initializable.rb:30:in `instance_exec' 
    from /railties/lib/rails/application/finisher.rb:69:in `block in <module:Finisher>' 
    from /railties/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated' 
    from /railties/lib/rails/application/routes_reloader.rb:27:in `updater' 
    from /activesupport/lib/active_support/file_update_checker.rb:75:in `execute' 
    from /activesupport/lib/active_support/file_update_checker.rb:75:in `call' 
    from /railties/lib/rails/application/routes_reloader.rb:26:in `block in updater' 
    from /railties/lib/rails/application/routes_reloader.rb:15:in `reload!' 
    from /railties/lib/rails/application/routes_reloader.rb:33:in `clear!' 
    from /railties/lib/rails/application/routes_reloader.rb:33:in `each' 
    from /railties/lib/rails/application/routes_reloader.rb:35:in `block in clear!' 
    from /actionpack/lib/action_dispatch/routing/route_set.rb:330:in `clear!' 
    from /actionpack/lib/action_dispatch/routing/route_set.rb:330:in `each' 
    from /actionpack/lib/action_dispatch/routing/route_set.rb:330:in `block in clear!' 
    from /actionpack/lib/action_dispatch/routing/route_set.rb:315:in `eval_block' 
    from /actionpack/lib/action_dispatch/routing/route_set.rb:315:in `instance_exec' 
    from /ruby-2.0.0-p0/bundler/gems/sprockets-rails-bbf755e8b3aa/lib/sprockets/railtie.rb:125:in `block (2 levels) in <class:Railtie>' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:502:in `mount' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:1380:in `match' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:1380:in `each' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:1389:in `block in match' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:1408:in `decomposed_match' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:1429:in `add_route' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:1429:in `new' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:65:in `initialize' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:79:in `normalize_path!' 
    from /actionpack/lib/action_dispatch/routing/mapper.rb:307:in `normalize_path' 
    from /activesupport/lib/active_support/dependencies.rb:228:in `require' 
    from /activesupport/lib/active_support/dependencies.rb:213:in `load_dependency' 
    from /activesupport/lib/active_support/dependencies.rb:228:in `block in require' 
    /activesupport/lib/active_support/dependencies.rb:228:in `require': cannot load such file -- pry (LoadError) 

可能嗎?

+0

覆寫'Exception#backtrace'導致'堆棧層次太深'和'非法硬件指令'。 – Leventix 2013-04-24 21:00:29

+0

@Leventix你可能不想從monkeypatch'Exception'中拯救。相反,您可能想從「StandardError」中拯救。這是爲什麼:http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby – Andrew 2014-02-20 23:28:53

回答

2

有幾種方法可以做到這一點。

如果你在IRB或調試器是這樣的:

caller.reverse 

會給你你想要的東西。然後 另一種方法是包裝所有的代碼,像這樣

begin 
    all the code 
rescue StandardError => e 
    puts e.backtrace.reverse 
end 

最後,你可以在異常延長回溯到打印caller.reverse但是擴展的核心模塊是不是一個好主意。

+0

你可能不希望從monkeypatch'異常'。相反,您可能想從「StandardError」中拯救。這是爲什麼:http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby – Andrew 2014-02-20 23:27:09