Відповіді:
Використовуйте плагін pry-stack_explorer , він дозволяє переміщати стек викликів вгору та вниз (з up
і down
), відображати стек callsta (з show-stack
) тощо:
дивіться тут:
Frame number: 0/64
From: /Users/johnmair/ruby/rails_projects/personal_site/app/controllers/posts_controller.rb @ line 7 PostsController#index:
5: def index
6: @posts = Post.all
=> 7: binding.pry
8: end
[1] pry(#<PostsController>)> show-stack
Showing all accessible frames in stack (65 in total):
--
=> #0 index <PostsController#index()>
#1 [method] send_action <ActionController::ImplicitRender#send_action(method, *args)>
#2 [method] process_action <AbstractController::Base#process_action(method_name, *args)>
#3 [method] process_action <ActionController::Rendering#process_action(*arg1)>
<... clipped ...>
[2] pry(#<PostsController>)> up
Frame number: 1/64
Frame type: method
From: /Users/johnmair/.rvm/gems/ruby-2.0.0-p0/gems/actionpack-3.2.8/lib/action_controller/metal/implicit_render.rb @ line 4 ActionController::ImplicitRender#send_action:
3: def send_action(method, *args)
=> 4: ret = super
5: default_render unless response_body
6: ret
7: end
[3] pry(#<PostsController>)>
Щоб це зробити без будь-яких плагінів (я мав проблеми з pry-stack_explorer), просто подивіться caller
.
Я фактично шукаю назву свого проекту, щоб відфільтрувати всі нерелевантні елементи стеку рейок. Наприклад, якби назва мого проекту archie
я використовував:
caller.select {|line| line.include? "archie" }
Що дає мені слід стека, який я шукаю.
Скороченим шляхом буде:
caller.select {|x| x["archie"] }
Що працює так само добре.
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
Існує pry-backtrace, який показує зворотній слід для сеансу Pry.
Є також wtf? . Яке шоу - це відстань останнього винятку. Додайте більше знаків запитання, щоб переглянути більше задніх або окличних знаків, щоб побачити все це.
Введіть довідку в програмі, щоб переглянути всі інші команди :)
pry-backtrace
це нормально, але pry-stack_explorer
плагін набагато потужніший (хоча це інший дорогоцінний камінь, плагін)
Ви можете використовувати метод виклику, який уже визначений всередині бібліотеки дорогоцінних каменів. Поверненим значенням цього методу буде масив. Таким чином, ви можете застосувати методи пошуку для пошуку в цій купі рядків
Нижче також корисно для потужного сліду. https://github.com/pry/pry-stack_explorer
Продовжуючи відповідь Пола Олівера.
Якщо у вас є список фраз, які ви хочете остаточно виключити, ви можете зробити це за допомогою функції користувальницьких команд в Pry.
В ~/.pryrc
:
Pry::Commands.block_command "callerf", "Filter the caller backtrace" do
output = caller.reject! { |line| line["minitest"] || line["pry"] }
puts "\e[31m#{output.join("\n")}\e[0m"
end
Виклик callerf
призведе до відфільтрованого caller
виводу. Дивні знаки навколо #{output}
забарвлення, щоб повторити оригінальний вигляд caller
. Я взяв колір звідси .
Крім того, якщо ви не хочете робити спеціальну команду, використовуйте Ctrl+R
для пошуку в історії команд.
~/.pryrc
. Якщо ні, просто створіть його. ~/
завжди означає домашню папку в системах Unix.