Byebug 如何在没有断点的情况下继续

How to continue without breakpoints in Byebug

使用 byebug gem 使我能够 continue 直到下一个断点:

(byebug) help

  break      -- Sets breakpoints in the source code
  catch      -- Handles exception catchpoints
  condition  -- Sets conditions on breakpoints
  continue   -- Runs until program ends, hits a breakpoint or reaches a line
  delete     -- Deletes breakpoints
  disable    -- Disables breakpoints or displays
  display    -- Evaluates expressions every time the debugger stops
  down       -- Moves to a lower frame in the stack trace
  edit       -- Edits source files
  enable     -- Enables breakpoints or displays
  finish     -- Runs the program until frame returns
  frame      -- Moves to a frame in the call stack
  help       -- Helps you using byebug
  history    -- Shows byebug's history of commands
  info       -- Shows several informations about the program being debugged
  interrupt  -- Interrupts the program
  irb        -- Starts an IRB session
  kill       -- Sends a signal to the current process
  list       -- Lists lines of source code
  method     -- Shows methods of an object, class or module
  next       -- Runs one or more lines of code
  pry        -- Starts a Pry session
  ps         -- Evaluates an expression and prettyprints & sort the result
  quit       -- Exits byebug
  restart    -- Restarts the debugged program
  save       -- Saves current byebug session to a file
  set        -- Modifies byebug settings
  show       -- Shows byebug settings
  source     -- Restores a previously saved byebug session
  step       -- Steps into blocks or methods one or more times
  thread     -- Commands to manipulate threads
  tracevar   -- Enables tracing of a global variable
  undisplay  -- Stops displaying all or some expressions when program stops
  untracevar -- Stops tracing a global variable
  up         -- Moves to a higher frame in the stack trace
  var        -- Shows variables and its values
  where      -- Displays the backtrace

我找遍了,找不到 "continue without breakpoints" 的方法。我能想到的唯一方法是删除或注释 byebug 语句,使用 q! 退出并重新启动测试。

如何在 Ruby 中的其他 byebug 语句不停止的情况下继续?

代码中的 byebug 方法调用不是 'breakpoint'(考虑帮助输出中对断点的引用)。

根据帮助输出,可以使用 disable 命令禁用 breakpoints。但这并不能解决您的问题,因为下一个 byebug 将再次暂停执行。

因为byebug只是一个方法调用,你可以让它成为有条件的:

byebug if SomeModule.byebug?

然后,在 SomeModule 中,您可以使用全局变量来切换它 on/off。您要么必须在对 byebug 的所有调用中执行此操作,要么可以对 byebug 方法进行猴子修补以执行相同的操作,alias_method_chain 或类似的方法。

"Make Byebug finish executing without exiting Pry" 是类似的答案。

我刚刚在 code 中发现,您可以使用以下方法完全停止 byebug:

Byebug.mode = :off

您无法重新打开它,因为它不会再附着在自己身上,但这很方便,例如当只是调试你想要完成的脚本时 运行.

从 byebug 11.0.0 开始,您可以使用 continue! 或别名 c!

查看此 PR https://github.com/deivid-rodriguez/byebug/pull/524

如果您正在使用 Rails,您可能希望根据新请求将其重置,然后您可以添加过滤器:

# application_controller.rb
 before_action do
    if defined?(Byebug) && Byebug.mode == :off && Rails.env.development?
      Byebug.mode = nil
    end
 end