Pry in Rails kullanarak, kod bağlamasında bir kesme noktasına ulaştığımda.
Buraya nasıl geldiğimi, beni kimin aradığını, onları kimin aradığını vb. Bilmek istiyorum. Ama tuhaf bir şekilde bu komutu görmüyorum. Kimse biliyor mu?
Pry in Rails kullanarak, kod bağlamasında bir kesme noktasına ulaştığımda.
Buraya nasıl geldiğimi, beni kimin aradığını, onları kimin aradığını vb. Bilmek istiyorum. Ama tuhaf bir şekilde bu komutu görmüyorum. Kimse biliyor mu?
Yanıtlar:
Pry-stack_explorer eklentisini kullanın, çağrı yığınını ( up
ve ile down
) yukarı ve aşağı hareket ettirmenize, çağrı yığınını (ile ) görüntülemenize show-stack
vb.
buraya bakın:
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>)>
Bunu herhangi bir gözetleme eklentisi olmadan yapmak için (gözetlemek-stack_explorer ile sorunlar yaşıyordum), sadece bakın caller
.
Aslında tüm alakasız ray yığın öğelerini filtrelemek için proje adımı arıyorum. Örneğin, proje adım archie
olsaydı şunu kullanırdım:
caller.select {|line| line.include? "archie" }
Bu da bana aradığım yığın izini veriyor.
Daha kısa bir yol şöyle olacaktır:
caller.select {|x| x["archie"] }
Bu da aynı şekilde çalışıyor.
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
Orada gözetlemek-backtrace hangi gösteri kaldırın oturumu için backtrace bu.
Ayrıca wtf var mı? . Hangi şov, en son istisnanın izini sürüyor. Daha fazla geri izlemeyi görüntülemek için daha fazla soru işareti veya tümünü görmek için bir ünlem işareti ekleyin.
Tür yardım gözetlemek diğer tüm komutları görmek için :)
pry-backtrace
tamam, ancak pry-stack_explorer
eklenti çok daha güçlü (yine de başka bir mücevher, bir eklenti)
Gem kitaplığında önceden tanımlanmış olan çağırma yöntemini kullanabilirsiniz. Bu yöntemin dönüş değeri bir dizi olacaktır. Böylece, bu satır dizisinde arama için dizi yöntemlerini uygulayabilirsiniz.
Aşağıda güçlü izleme için de yararlıdır. https://github.com/pry/pry-stack_explorer
Paul Oliver'ın cevabını genişletiyoruz.
Kalıcı olarak dışlamak istediğiniz bir kelime öbeği listeniz varsa, bunu Pry'deki özel komutlar özelliği ile yapabilirsiniz.
İçinde ~/.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
Çağırma callerf
, filtrelenmiş bir çıktıyla sonuçlanacaktır caller
. Garip işaretler etrafında #{output}
özgün bir görünüm çoğaltmak için boyama edilir caller
. Rengi buradan aldım .
Alternatif olarak, özel bir komut oluşturmak istemiyorsanız, Ctrl+R
komut geçmişinde arama yapmak için kullanın.
~/.pryrc
. Değilse, sadece oluşturun. ~/
her zaman Unix sistemlerindeki ana klasör anlamına gelir.