Class: RubyDebug
Instance Attribute Summary collapse
Attributes inherited from ArcadiaExt
#arcadia
Instance Method Summary
collapse
Methods included from Autils
#full_in_path_command, #is_windows?
Methods inherited from ArcadiaExt
#conf, #conf_array, #exec, #float_frame, #frame, #initialize
Constructor Details
This class inherits a constructor from ArcadiaExt
Instance Attribute Details
#rdc ⇒ Object
Returns the value of attribute rdc.
1370
1371
1372
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1370
def rdc
@rdc
end
|
#rds ⇒ Object
Returns the value of attribute rds.
1369
1370
1371
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1369
def rds
@rds
end
|
Instance Method Details
#break_name(_file, _line) ⇒ Object
1457
1458
1459
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1457
def break_name(_file,_line)
"#{_file}:#{_line}"
end
|
#breakpoint_add(_file, _line) ⇒ Object
1480
1481
1482
1483
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1480
def breakpoint_add(_file,_line)
breakpoint_add_live(_file,_line)
@static_breakpoints << {:file=>_file,:line=>_line}
end
|
#breakpoint_add_live(_file, _line) ⇒ Object
1461
1462
1463
1464
1465
1466
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1461
def breakpoint_add_live(_file,_line)
if @rdc && @rdc.is_alive?
@breakpoints[breakpoint_suf(_file,_line)] = @rdc.set_breakpoint(_file, _line.to_i)
end
end
|
#breakpoint_del(_file, _line) ⇒ Object
1486
1487
1488
1489
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1486
def breakpoint_del(_file,_line)
breakpoint_del_live(_file,_line)
@static_breakpoints.delete_if{|b| (b[:file]==_file && b[:line]==_line)}
end
|
#breakpoint_del_live(_file, _line) ⇒ Object
1468
1469
1470
1471
1472
1473
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1468
def breakpoint_del_live(_file,_line)
if @rdc && @rdc.is_alive?
@rdc.unset_breakpoint(@breakpoints.delete(breakpoint_suf(_file,_line)))
end
end
|
#breakpoint_free_live ⇒ Object
1475
1476
1477
1478
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1475
def breakpoint_free_live
@breakpoints.clear
end
|
#debug(_filename = nil) ⇒ Object
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1527
def debug(_filename=nil)
if _filename && !debugging?
begin
self.debug_begin
@arcadia['pers']['run.file.last']=_filename
@rds = RubyDebugServer.new(self,@arcadia) if @rds.nil?
@rds.start_session(_filename, conf('server.host'), conf('server.port'))
@rdc = RubyDebugClient.new(self, conf('server.host'), conf('server.port'), conf('server.timeout')) if @rdc.nil?
@rdv = RubyDebugView.new(self) if @rdv.nil?
self.frame.show
@rdv.start_process(_filename)
if @rdc.start_session
@static_breakpoints.each{|_b|
breakpoint_add_live(_b[:file], _b[:line])
}
end
rescue Exception => e
Arcadia.console(self, 'msg'=>"---> "+e.to_s, 'level'=>'debug')
end
end
end
|
#debug_begin ⇒ Object
1522
1523
1524
1525
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1522
def debug_begin
breakpoint_free_live
end
|
#debug_free ⇒ Object
1563
1564
1565
1566
1567
1568
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1563
def debug_free
self.frame.free
self.frame(1).free
@rdc = nil
@rdv = nil
end
|
#debug_quit ⇒ Object
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1570
def debug_quit
if @rdc
if @rdc.is_alive?
Thread.new{
Tk.messageBox('icon' => 'info',
'type' => 'ok',
'title' => '(Arcadia) Debug',
'message' => "Debug in course, stop it before exit")
}
else
begin
debug_free
rescue Exception => e
Arcadia.console(self, 'msg'=>"debug_quit:---> "+e.to_s, 'level'=>'debug')
end
end
end
end
|
#debugging? ⇒ Boolean
debug(@raised_file) if @raised_file!=nil
1518
1519
1520
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1518
def debugging?
!@rdc.nil? && @rdc.is_alive?
end
|
#eval_expression(_exp) ⇒ Object
def do_editor_event(_event)
case _event.signature
when EditorContract::BREAKPOINT_AFTER_CREATE
self.breakpoint_add(File.expand_path(_event.context.file), _event.context.line)
when EditorContract::BREAKPOINT_AFTER_DELETE
self.breakpoint_del(File.expand_path(_event.context.file), _event.context.line)
when EditorContract::BUFFER_AFTER_RAISE
@raised_file=_event.context.file
when EditorContract::EVAL_EXPRESSION
eval_expression(_event.context.text)
end
end
1436
1437
1438
1439
1440
1441
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1436
def eval_expression(_exp)
res = @rdc.debug_eval(_exp) if @rdc && @rdc.is_debugging_ready?
hash = Hash.new
hash[_exp]=res
@rdv.show_expression(_exp, hash) if res
end
|
#on_before_build(_event) ⇒ Object
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1371
def on_before_build(_event)
if !full_in_path_command('rdebug').nil?
Arcadia.attach_listener(self, BufferEvent)
@breakpoints = Hash.new
@static_breakpoints = Array.new
else
Arcadia.console(self, 'msg'=>"Warning: Extension ae-ruby-debug depend upon rdebug command (install it or update system path!)", 'level'=>'error')
end
Arcadia.attach_listener(self, DebugEvent)
end
|
#on_buffer(_event) ⇒ Object
1388
1389
1390
1391
1392
1393
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1388
def on_buffer(_event)
case _event
when BufferRaisedEvent
@raised_file=_event.file
end
end
|
#on_build(_event) ⇒ Object
1384
1385
1386
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1384
def on_build(_event)
end
|
#on_debug(_event) ⇒ Object
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1395
def on_debug(_event)
case _event
when StartDebugEvent
_filename = _event.file
_filename = @arcadia['pers']['run.file.last'] if _filename == "*LAST"
debug(_filename)
when StepDebugEvent
if (_event.command == :quit_yes)
@rds.quit_confirm_request = true
end
@rdc.send(_event.command) if @rdc.is_alive?
when SetBreakpointEvent
self.breakpoint_add(File.expand_path(_event.file), _event.row)
when UnsetBreakpointEvent
self.breakpoint_del(File.expand_path(_event.file), _event.row)
when EvalExpressionEvent
eval_expression(_event.expression)
when StopDebugEvent
self.debug_quit
end
end
|
#on_exit_query(_event) ⇒ Object
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1493
def on_exit_query(_event)
if @rdc && @rdc.is_alive?
query = (Tk.messageBox('icon' => 'question', 'type' => 'yesno',
'title' => '(Arcadia) Debug',
'message' => "Debug in course, do you want to exit?")=='yes')
if query
debug_quit
_event.can_exit=true
else
_event.can_exit=false
end
else
_event.can_exit=true
end
end
|
#rdebug_server_update(_state) ⇒ Object
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
|
# File 'ext/ae-ruby-debug/ae-ruby-debug.rb', line 1552
def rdebug_server_update(_state)
case _state
when RubyDebugServer::RDS_QUIET
@rdc.kill if @rdc
end
end
|