প্রাই: আমাকে স্ট্যাকটি দেখান


102

প্রি ইন রেলে ব্যবহার করা, যখন আমি কোড বাইন্ডিং.প্রাইতে ব্রেকপয়েন্টে হিট করি

আমি কীভাবে এখানে এসেছি, কে আমাকে ডেকেছিল, কে তাদের ডেকেছিল ইত্যাদি আমি জানতে চাই তবে অদ্ভুতভাবে আমি এই আদেশটি দেখতে পাচ্ছি না। কেউ কি জানে?

উত্তর:


51

পিআর-স্ট্যাক_এক্সপ্লোরার প্লাগইনটি ব্যবহার করুন , এটি আপনাকে কল-স্ট্যাককে উপরে এবং নীচে (সহ 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>)> 

141

কোনও পিআর প্লাগইন ছাড়াই এটি করার জন্য (আমার কাছে পিআর-স্ট্যাক_এক্সপ্লোরার সমস্যা ছিল), কেবল দেখুন caller

আমি সমস্ত অপ্রাসঙ্গিক রেল স্ট্যাক আইটেমগুলি ফিল্টার করার জন্য আমার প্রকল্পের নামটি সন্ধান করি। উদাহরণস্বরূপ, যদি আমার প্রকল্পের নাম archieআমি ব্যবহার করতাম:

caller.select {|line| line.include? "archie" }

যা আমাকে সন্ধানের জন্য স্ট্যাক ট্রেস দেয়।

একটি ছোট উপায় হ'ল:

caller.select {|x| x["archie"] }

যা ঠিক পাশাপাশি কাজ করে।


4
এটা অসাধারণ. আমি বিরক্ত হয়েছিলাম কারণ এতে কল কল স্ট্যাক অন্তর্ভুক্ত ছিল এবং আমি কেবলমাত্র আমার অ্যাপ্লিকেশন থেকে বিশেষত কী আসছিল তা চেয়েছিলাম। +1!
সিডিপালমার

6
পারফেক্ট আমি এটিতে প্রবেশের জন্য টিএমউক্সে একটি কী-কম্বো যুক্ত করেছি ('বি' সেন্ড-কীগুলি আবদ্ধ করুন ... ^ এম '), পরিবর্তে "প্রত্যাখ্যান" ব্যবহার করুন যাতে এটি আরও সাধারণ: caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
হুডস্লাইড

4
রুবি সম্প্রদায়ের জন্য গঠন করা সত্য, একমাত্র দরকারী উত্তর কিছু প্লাগইন ইনস্টল করার পরামর্শের নীচে সমাহিত করা হয়।
জেসি illিলন

4
এই উত্তর অনেক upvotes প্রাপ্য। হ্যাঁ, আপনি pry এর উপরে আরও স্টাফ ইনস্টল করতে পারেন । তবে আপনি
রুবি'র

4
অতিরিক্ত উত্তর প্লাগইন প্রয়োজন না হওয়ায় এই উত্তরটি সঠিক হওয়া উচিত!
আলভোরো কাভালকান্তি

83

নেই কিছুর মধ্যে উঁকি মারা-ব্যাক-ট্রেস যা প্রদর্শনী Pry সেশনের জন্য ব্যাক-ট্রেস আছে।

রয়েছে Wtf? । কোন শো সবচেয়ে সাম্প্রতিক ব্যতিক্রমের ব্যাকট্রিস। ব্যাকট্রিজের আরও দেখতে আরও প্রশ্ন চিহ্ন যুক্ত করুন বা এগুলি দেখতে একটি বিস্ময়কর চিহ্ন mark

অন্যান্য সমস্ত কমান্ড দেখতে পিএসিতে সহায়তা টাইপ করুন :)


4
pry-backtraceঠিক আছে, তবে pry-stack_explorerপ্লাগইনটি আরও শক্তিশালী (যদিও এটি অন্য একটি রত্ন, একটি প্লাগইন)
ঘোড়াগিরি

7
তবে ঘটনাটি হ'ল কখনও কখনও আপনি এই সমস্ত বৈশিষ্ট্য ব্যবহার করেন না :)
জং নগুইন

1

আপনি কলার পদ্ধতিটি ব্যবহার করতে পারেন যা রত্ন লাইব্রেরির ভিতরে ইতিমধ্যে সংজ্ঞায়িত হয়েছে। এই পদ্ধতির রিটার্ন মান একটি অ্যারে হবে। সুতরাং আপনি ইভেন্টগুলি লাইনের সেই গুচ্ছটিতে অনুসন্ধানের জন্য অ্যারে পদ্ধতিগুলি প্রয়োগ করতে পারেন

নীচে শক্তিশালী ট্রেস জন্য সহায়ক। https://github.com/pry/pry-stack_explorer


0

পল অলিভারের উত্তরটি প্রসারিত করা।

আপনার যদি বাক্যাংশের একটি তালিকা থাকে তবে আপনি স্থায়ীভাবে বাদ দিতে চান আপনি এটি প্রাইতে একটি কাস্টম কমান্ড বৈশিষ্ট্য সহ করতে পারেন।

ইন ~/.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। যদি তা না হয় তবে এটি তৈরি করুন। ~/সর্বদা ইউনিক্স সিস্টেমে হোম ফোল্ডারটি বোঝায়।
sloneorzeszki
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.