Respuestas:
Use el complemento pry-stack_explorer , le permite moverse hacia arriba y hacia abajo en la pila de llamadas (con up
y down
), mostrar la pila de llamadas (con show-stack
), y así sucesivamente:
mira aquí:
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>)>
Para hacer esto sin ningún complemento de palanca (estaba teniendo problemas con pry-stack_explorer), solo mire caller
.
De hecho, busco el nombre de mi proyecto para filtrar todos los elementos de pila de rieles irrelevantes. Por ejemplo, si el nombre de mi proyecto fuera archie
, usaría:
caller.select {|line| line.include? "archie" }
Lo que me da el rastro de pila que estoy buscando.
Una forma más corta sería:
caller.select {|x| x["archie"] }
Que funciona igual de bien.
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
Hay rastro de palanca que muestra el rastro de retroceso de la sesión de palanca .
También hay wtf? . Cuál programa es el rastro de la excepción más reciente. Agregue más signos de interrogación para ver más del retroceso o un signo de exclamación para verlo todo.
Escriba ayuda en palanca para ver todos los demás comandos :)
pry-backtrace
está bien, pero el pry-stack_explorer
complemento es mucho más poderoso (aunque es otra joya, un complemento)
Puede usar el método de llamada que ya está definido dentro de la biblioteca de gemas. El valor de retorno de ese método será una matriz. Entonces puede aplicar métodos de matriz para buscar en ese grupo de líneas
A continuación, también es útil para un seguimiento poderoso. https://github.com/pry/pry-stack_explorer
Ampliando la respuesta de Paul Oliver.
Si tiene una lista de frases que desea excluir permanentemente, puede hacerlo con una función de comandos personalizados en Pry.
En ~/.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
Llamar callerf
dará como resultado una caller
salida filtrada . Los signos extraños alrededor #{output}
están coloreando para replicar el aspecto original del caller
. Tomé el color de aquí .
Alternativamente, si no desea crear un comando personalizado, utilice Ctrl+R
para buscar en el historial de comandos.
~/.pryrc
. Si no es así, simplemente créelo. ~/
siempre significa la carpeta de inicio en los sistemas Unix.