programing

Pry : 스택보기

nasanasas 2020. 9. 15. 07:55
반응형

Pry : 스택보기


코드 바인딩에서 중단 점에 도달했을 때 Rails에서 Pry를 사용합니다.

내가 여기에 어떻게 왔는지, 누가 전화했는지, 누가 전화했는지 등을 알고 싶습니다.하지만 이상하게도 그 명령이 보이지 않습니다. 아는 사람 있나요?


사용 놀리려는-stack_explorer의 플러그인을, 당신이 이동하고 호출 스택 아래 (로 할 수 있습니다 updown), (함께 호출 스택을 표시 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"] }

잘 작동합니다.


놀리려는-역 추적 하는보기 올립니다 세션에 대한 역 추적의는.

또한이 무슨 일? . 어느 쇼가 가장 최근 예외의 역 추적입니다. 역 추적을 더 많이 보려면 물음표를 더 추가하고 모든 것을 보려면 느낌표를 추가하십시오.

다른 모든 명령을 보려면 pry에 help입력 하십시오. :)


gem 라이브러리 내에 이미 정의 된 호출자 메서드를 사용할 수 있습니다. 해당 메서드의 반환 값은 배열이됩니다. 따라서 해당 행에서 검색을 위해 배열 메서드를 이벤트 적용 할 수 있습니다.

아래는 강력한 추적에도 도움이됩니다. https://github.com/pry/pry-stack_explorer


Paul Oliver의 답변을 확장합니다.

영구적으로 제외하려는 구문 목록이있는 경우 Pry의 사용자 지정 명령 기능을 사용하여 수행 할 수 있습니다.

In ~/.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

Calling callerf will result in a filtered caller output. Weird signs around #{output} is coloring to replicate the original look of the caller. I took the color from here.

Alternatively, if you don't want to make a custom command, use Ctrl+R to search through command history.

참고URL : https://stackoverflow.com/questions/15303103/pry-show-me-the-stack

반응형