lib/byebug/commands/save.rb
# frozen_string_literal: true require_relative "../command" module Byebug # # Save current settings to use them in another debug session. # class SaveCommand < Command self.allow_in_control = true self.allow_in_post_mortem = true def self.regexp /^\s* sa(?:ve)? (?:\s+(\S+))? \s*$/x end def self.description <<-DESCRIPTION save[ FILE] #{short_description} Byebug state is saved as a script file. This includes breakpoints, catchpoints, display expressions and some settings. If no filename is given, byebug will fabricate one. Use the "source" command in another debug session to restore the saved file. DESCRIPTION end def self.short_description "Saves current byebug session to a file" end def execute file = File.open(@match[1] || Setting[:savefile], "w") save_breakpoints(file) save_catchpoints(file) save_displays(file) save_settings(file) print pr("save.messages.done", path: file.path) file.close end private def save_breakpoints(file) Byebug.breakpoints.each do |b| file.puts "break #{b.source}:#{b.pos}#{" if #{b.expr}" if b.expr}" end end def save_catchpoints(file) Byebug.catchpoints.each_key do |c| file.puts "catch #{c}" end end def save_displays(file) Byebug.displays.each { |d| file.puts "display #{d[1]}" if d[0] } end def save_settings(file) %w[autoirb autolist basename].each do |setting| file.puts "set #{setting} #{Setting[setting.to_sym]}" end end end end