답변:
사용 놀리려는-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에 help 를 입력 하십시오. :)
pry-backtrace
좋아,하지만 pry-stack_explorer
플러그인은 방법이 더 강력하다 (이것은 다른 보석, 플러그인 비록)
gem 라이브러리 내에 이미 정의 된 호출자 메서드를 사용할 수 있습니다. 해당 메서드의 반환 값은 배열이됩니다. 따라서 해당 행에서 검색을 위해 배열 메서드를 이벤트 적용 할 수 있습니다.
아래는 강력한 추적에도 도움이됩니다. https://github.com/pry/pry-stack_explorer
Paul Oliver의 답변을 확장합니다.
영구적으로 제외하려는 구문 목록이있는 경우 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 시스템의 홈 폴더를 의미합니다.