Используя 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 (у меня были проблемы с 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? . Который показывает след самого последнего исключения. Добавьте больше вопросительных знаков, чтобы просмотреть больше следов, или восклицательного знака, чтобы увидеть все.
Введите help в pry, чтобы увидеть все остальные команды :)
источник
pry-backtrace
в порядке, ноpry-stack_explorer
плагин намного мощнее (хотя это еще одна жемчужина, плагин)Вы можете использовать вызывающий метод, который уже определен внутри библиотеки гемов. Возвращаемое значение этого метода будет массивом. Таким образом, вы можете применить методы массива для поиска в этой группе строк
Ниже также полезен мощный след. https://github.com/pry/pry-stack_explorer
источник
Продолжая ответ Пола Оливера.
Если у вас есть список фраз, которые вы хотите навсегда исключить, вы можете сделать это с помощью функции пользовательских команд в Pry.
В
~/.pryrc
:Вызов
callerf
приведет к отфильтрованномуcaller
выводу. Странные знаки вокруг#{output}
раскрашены, чтобы воспроизвести первоначальный видcaller
. Я взял цвет отсюда .В качестве альтернативы, если вы не хотите создавать собственную команду, используйте
Ctrl+R
для поиска в истории команд.источник
~/.pryrc
. Если нет, просто создайте его.~/
всегда означает домашнюю папку в системах Unix.