Использование Pry in Rails, когда я ударил точку останова в коде binding.pry
Я хочу знать, как я сюда попал, кто позвонил мне, кто их назвал, и т.д. Но странно я не вижу эту команду. Кто-нибудь знает?
Использование Pry in Rails, когда я ударил точку останова в коде binding.pry
Я хочу знать, как я сюда попал, кто позвонил мне, кто их назвал, и т.д. Но странно я не вижу эту команду. Кто-нибудь знает?
Используйте плагин pry-stack_explorer, он позволяет перемещаться вверх и вниз по стеку вызовов (с помощью up
и down
), отображать стоп-кадр (с 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-backtrace, которые показывают обратную трассировку для сеанса Pry.
Существует также wtf?. Который показывает обратную линию последнего исключения. Добавьте больше вопросительных знаков, чтобы просмотреть больше обратного следа или восклицательный знак, чтобы увидеть все это.
Введите help в списке, чтобы увидеть все остальные команды:)
Чтобы сделать это без каких-либо pry-плагинов (у меня были проблемы с pry-stack_explorer), просто посмотрите caller
.
Я действительно ищу свое имя проекта, чтобы отфильтровать все ненужные элементы стека рельсов. Например, если мое имя проекта archie
, я бы использовал:
caller.select {|line| line.include? "archie" }
Что дает мне трассировку стека, которую я ищу.
Более короткий путь:
caller.select {|x| x["archie"] }
Что работает так же хорошо.
Вы можете использовать метод вызова, который уже определен внутри библиотеки драгоценных камней. Возвращаемое значение этого метода будет массивом. Таким образом, вы можете применять методы массива для поиска в этой группе строк
Ниже также полезно использовать мощную трассировку. https://github.com/pry/pry-stack_explorer