簡體   English   中英

Ruby / byebug / binding.pry:如何退后一步?

[英]Ruby / byebug / binding.pry: How to step back?

我在binding.pry或byebug上鍵入next ,進入下一行。 我使用單step執行程序。 如何退回一條線?

我一直在瀏覽文檔,沒有運氣。 幫助極大的贊賞。 謝謝。

使用ByeBug時無法退后。

妥協解決方案正在重新嘗試通過撬動執行先前的代碼。

例如,如果您停止了Controller的動作:

def index
    list = Orders.for_user(current_user) 
=>  binding.pry
end

現在您想了解為什么list空? -您可以運行:

> debug Orders.for_user(current_user)

並檢查那里發生了什么


為什么我們必須使用折衷方案? 問題在於,ruby環境無法在每個步驟上保持系統的整體狀態。 大概是因為您很可能仍將使用外部系統(例如通過API調用),這可能會更改其內部狀態,並且您無法自動“回滾”。

在此“備忘單”上沒有列出“后退”或“撤消步驟”命令。 我建議使用ctrl + c(x2),ctrl + d,將其放回您的容器中,然后再次擊中綁定撬。

https://gist.github.com/lfender6445/9919357

您可以在binding.pry中使用上下方法

看這里:

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>)> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM