Class: LLDB::Debugger
- Inherits:
-
Object
- Object
- LLDB::Debugger
- Includes:
- NativeLifecycle
- Defined in:
- lib/lldb/debugger.rb
Class Method Summary collapse
Instance Method Summary collapse
- #async=(value) ⇒ Object
- #async? ⇒ Boolean
- #broadcaster ⇒ Object
- #close ⇒ Object
- #command_interpreter ⇒ Object
- #create_target(filename, arch: nil, platform: nil, add_dependent_modules: true) ⇒ Object
- #create_target_simple(filename) ⇒ Object
- #delete_target(target) ⇒ Object
- #find_target_with_process_id(pid) ⇒ Object
- #handle_command(command) ⇒ Object
-
#initialize(ptr, context: Context.new) ⇒ Debugger
constructor
A new instance of Debugger.
- #listener ⇒ Object
- #num_targets ⇒ Object
- #selected_target ⇒ Object
- #selected_target=(target) ⇒ Object
- #target_at_index(index) ⇒ Object
- #targets ⇒ Object
- #to_ptr ⇒ Object
- #valid? ⇒ Boolean
Methods included from NativeLifecycle
#closed?, #context, #context!, #ensure_open!, #initialize_native_object
Constructor Details
#initialize(ptr, context: Context.new) ⇒ Debugger
Returns a new instance of Debugger.
21 22 23 24 25 26 27 28 |
# File 'lib/lldb/debugger.rb', line 21 def initialize(ptr, context: Context.new) @targets = [] # : Array[Target] initialize_native_object( ptr, release: ->(released) { FFIBindings.lldb_debugger_destroy(released) }, context: context ) end |
Class Method Details
.create(source_init_files: false) ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/lldb/debugger.rb', line 10 def self.create(source_init_files: false) LLDB.ensure_initialized! ptr = FFIBindings.lldb_debugger_create_with_source_init_files(source_init_files ? 1 : 0) raise LLDBError, 'Failed to create debugger' if ptr.null? new(ptr, context: Context.new).tap { |debugger| LLDB.register_debugger(debugger) } end |
.release(ptr) ⇒ Object
32 33 34 |
# File 'lib/lldb/debugger.rb', line 32 def self.release(ptr) ->(_id) { FFIBindings.lldb_debugger_destroy(ptr) unless ptr.null? } end |
.version_string ⇒ Object
168 169 170 |
# File 'lib/lldb/debugger.rb', line 168 def self.version_string FFIBindings.lldb_debugger_get_version_string end |
Instance Method Details
#async=(value) ⇒ Object
132 133 134 135 136 |
# File 'lib/lldb/debugger.rb', line 132 def async=(value) raise InvalidObjectError, 'Debugger is not valid' unless valid? FFIBindings.lldb_debugger_set_async(@ptr, value ? 1 : 0) end |
#async? ⇒ Boolean
124 125 126 127 128 |
# File 'lib/lldb/debugger.rb', line 124 def async? return false unless valid? FFIBindings.lldb_debugger_get_async(@ptr) != 0 end |
#broadcaster ⇒ Object
183 184 185 186 187 188 189 190 |
# File 'lib/lldb/debugger.rb', line 183 def broadcaster raise InvalidObjectError, 'Debugger is not valid' unless valid? broadcaster_ptr = FFIBindings.lldb_debugger_get_broadcaster(@ptr) raise LLDBError, 'Failed to get debugger broadcaster' if broadcaster_ptr.nil? || broadcaster_ptr.null? Broadcaster.from_ptr(broadcaster_ptr, context: context) end |
#close ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/lldb/debugger.rb', line 42 def close return false if closed? context!.close(except: @native_handle) @native_handle.close @ptr = NativeHandle::NULL_POINTER true end |
#command_interpreter ⇒ Object
173 174 175 176 177 178 179 180 |
# File 'lib/lldb/debugger.rb', line 173 def command_interpreter raise InvalidObjectError, 'Debugger is not valid' unless valid? ci_ptr = FFIBindings.lldb_debugger_get_command_interpreter(@ptr) raise LLDBError, 'Failed to get command interpreter' if ci_ptr.nil? || ci_ptr.null? CommandInterpreter.new(ci_ptr, debugger: self, context: context) end |
#create_target(filename, arch: nil, platform: nil, add_dependent_modules: true) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/lldb/debugger.rb', line 56 def create_target(filename, arch: nil, platform: nil, add_dependent_modules: true) raise InvalidObjectError, 'Debugger is not valid' unless valid? error = Error.new target_ptr = FFIBindings.lldb_debugger_create_target( @ptr, filename.to_s, arch&.to_s, platform&.to_s, add_dependent_modules ? 1 : 0, error.to_ptr ) error.raise_if_error! raise LLDBError, "Failed to create target for '#{filename}'" if target_ptr.nil? || target_ptr.null? target = Target.new(target_ptr, debugger: self, context: context) @targets << target target end |
#create_target_simple(filename) ⇒ Object
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/lldb/debugger.rb', line 79 def create_target_simple(filename) raise InvalidObjectError, 'Debugger is not valid' unless valid? target_ptr = FFIBindings.lldb_debugger_create_target_simple(@ptr, filename.to_s) raise LLDBError, "Failed to create target for '#{filename}'" if target_ptr.nil? || target_ptr.null? target = Target.new(target_ptr, debugger: self, context: context) @targets << target target end |
#delete_target(target) ⇒ Object
148 149 150 151 152 153 154 |
# File 'lib/lldb/debugger.rb', line 148 def delete_target(target) raise InvalidObjectError, 'Debugger is not valid' unless valid? result = FFIBindings.lldb_debugger_delete_target(@ptr, target.to_ptr) != 0 @targets.delete(target) if result result end |
#find_target_with_process_id(pid) ⇒ Object
158 159 160 161 162 163 164 165 |
# File 'lib/lldb/debugger.rb', line 158 def find_target_with_process_id(pid) raise InvalidObjectError, 'Debugger is not valid' unless valid? target_ptr = FFIBindings.lldb_debugger_find_target_with_process_id(@ptr, pid) return nil if target_ptr.nil? || target_ptr.null? Target.new(target_ptr, debugger: self, context: context) end |
#handle_command(command) ⇒ Object
204 205 206 207 208 |
# File 'lib/lldb/debugger.rb', line 204 def handle_command(command) raise InvalidObjectError, 'Debugger is not valid' unless valid? FFIBindings.lldb_debugger_handle_command(@ptr, command) end |
#listener ⇒ Object
193 194 195 196 197 198 199 200 |
# File 'lib/lldb/debugger.rb', line 193 def listener raise InvalidObjectError, 'Debugger is not valid' unless valid? listener_ptr = FFIBindings.lldb_debugger_get_listener(@ptr) raise LLDBError, 'Failed to get debugger listener' if listener_ptr.nil? || listener_ptr.null? Listener.from_ptr(listener_ptr, context: context) end |
#num_targets ⇒ Object
91 92 93 94 95 |
# File 'lib/lldb/debugger.rb', line 91 def num_targets return 0 unless valid? FFIBindings.lldb_debugger_get_num_targets(@ptr) end |
#selected_target ⇒ Object
109 110 111 112 113 114 115 116 |
# File 'lib/lldb/debugger.rb', line 109 def selected_target raise InvalidObjectError, 'Debugger is not valid' unless valid? target_ptr = FFIBindings.lldb_debugger_get_selected_target(@ptr) return nil if target_ptr.nil? || target_ptr.null? Target.new(target_ptr, debugger: self, context: context) end |
#selected_target=(target) ⇒ Object
140 141 142 143 144 |
# File 'lib/lldb/debugger.rb', line 140 def selected_target=(target) raise InvalidObjectError, 'Debugger is not valid' unless valid? FFIBindings.lldb_debugger_set_selected_target(@ptr, target.to_ptr) end |
#target_at_index(index) ⇒ Object
99 100 101 102 103 104 105 106 |
# File 'lib/lldb/debugger.rb', line 99 def target_at_index(index) raise InvalidObjectError, 'Debugger is not valid' unless valid? target_ptr = FFIBindings.lldb_debugger_get_target_at_index(@ptr, index) return nil if target_ptr.nil? || target_ptr.null? Target.new(target_ptr, debugger: self, context: context) end |
#targets ⇒ Object
119 120 121 |
# File 'lib/lldb/debugger.rb', line 119 def targets (0...num_targets).map { |i| target_at_index(i) }.compact end |
#to_ptr ⇒ Object
211 212 213 |
# File 'lib/lldb/debugger.rb', line 211 def to_ptr @ptr end |
#valid? ⇒ Boolean
37 38 39 |
# File 'lib/lldb/debugger.rb', line 37 def valid? !@ptr.null? && FFIBindings.lldb_debugger_is_valid(@ptr) != 0 end |