debugger-xml 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/rdebug-ide +12 -9
  4. data/bin/rdebug-vim +30 -13
  5. data/debugger-xml.gemspec +7 -3
  6. data/lib/byebug/commands/frame.rb +16 -0
  7. data/lib/byebug/commands/help.rb +13 -0
  8. data/lib/byebug/commands/info.rb +13 -0
  9. data/lib/byebug/commands/inspect.rb +30 -0
  10. data/lib/byebug/commands/kill.rb +13 -0
  11. data/lib/byebug/commands/start.rb +25 -0
  12. data/lib/byebug/commands/threads.rb +10 -0
  13. data/lib/byebug/commands/trace.rb +13 -0
  14. data/lib/byebug/commands/variables.rb +54 -0
  15. data/lib/byebug/context_xml.rb +29 -0
  16. data/lib/byebug/printers/texts/xml.yml +122 -0
  17. data/lib/byebug/printers/xml.rb +197 -0
  18. data/lib/debugger/{xml/extensions/processor.rb → command_processor.rb} +0 -0
  19. data/lib/debugger/{xml/extensions/commands → commands}/edit.rb +0 -0
  20. data/lib/debugger/{xml/extensions/commands → commands}/frame.rb +0 -1
  21. data/lib/debugger/{xml/extensions/commands → commands}/help.rb +0 -0
  22. data/lib/debugger/{xml/extensions/commands → commands}/info.rb +0 -0
  23. data/lib/debugger/{xml/extensions/commands → commands}/inspect.rb +0 -0
  24. data/lib/debugger/{xml/extensions/commands → commands}/irb.rb +0 -0
  25. data/lib/debugger/{xml/extensions/commands → commands}/kill.rb +0 -0
  26. data/lib/debugger/commands/start.rb +25 -0
  27. data/lib/debugger/{xml/extensions/commands → commands}/threads.rb +0 -0
  28. data/lib/debugger/{xml/extensions/commands → commands}/tmate.rb +0 -0
  29. data/lib/debugger/{xml/extensions/commands → commands}/trace.rb +0 -0
  30. data/lib/debugger/{xml/extensions/commands → commands}/variables.rb +14 -0
  31. data/lib/debugger_xml.rb +91 -0
  32. data/lib/debugger_xml/byebug_proxy.rb +108 -0
  33. data/lib/debugger_xml/debugger_proxy.rb +115 -0
  34. data/lib/debugger_xml/fake_logger.rb +9 -0
  35. data/lib/debugger_xml/ide/control_command_processor.rb +69 -0
  36. data/lib/debugger_xml/ide/interface.rb +74 -0
  37. data/lib/debugger_xml/ide/logger.rb +9 -0
  38. data/lib/debugger_xml/ide/processor.rb +118 -0
  39. data/lib/debugger_xml/multiprocess/monkey.rb +47 -0
  40. data/lib/debugger_xml/multiprocess/pre_child.rb +79 -0
  41. data/lib/{debugger/xml → debugger_xml}/multiprocess/starter.rb +2 -2
  42. data/lib/debugger_xml/version.rb +3 -0
  43. data/lib/debugger_xml/vim/control_command_processor.rb +23 -0
  44. data/lib/debugger_xml/vim/interface.rb +46 -0
  45. data/lib/debugger_xml/vim/logger.rb +16 -0
  46. data/lib/debugger_xml/vim/notification.rb +35 -0
  47. data/lib/debugger_xml/vim/processor.rb +20 -0
  48. data/test/breakpoints_test.rb +0 -1
  49. data/test/ide/control_command_processor_test.rb +18 -13
  50. data/test/ide/processor_test.rb +11 -25
  51. data/test/printers/xml_test.rb +1 -0
  52. data/test/test_helper.rb +12 -3
  53. data/test/variables_test.rb +0 -1
  54. data/test/vim/control_command_processor_test.rb +4 -5
  55. data/test/vim/interface_test.rb +6 -6
  56. data/test/vim/notification_test.rb +3 -3
  57. data/test/vim/processor_test.rb +8 -8
  58. metadata +61 -48
  59. data/lib/debugger/xml.rb +0 -11
  60. data/lib/debugger/xml/extensions/ide_server.rb +0 -33
  61. data/lib/debugger/xml/extensions/vim_server.rb +0 -56
  62. data/lib/debugger/xml/fake_logger.rb +0 -11
  63. data/lib/debugger/xml/ide/control_command_processor.rb +0 -81
  64. data/lib/debugger/xml/ide/interface.rb +0 -72
  65. data/lib/debugger/xml/ide/logger.rb +0 -11
  66. data/lib/debugger/xml/ide/processor.rb +0 -94
  67. data/lib/debugger/xml/multiprocess/monkey.rb +0 -49
  68. data/lib/debugger/xml/multiprocess/pre_child.rb +0 -81
  69. data/lib/debugger/xml/version.rb +0 -5
  70. data/lib/debugger/xml/vim/control_command_processor.rb +0 -19
  71. data/lib/debugger/xml/vim/interface.rb +0 -42
  72. data/lib/debugger/xml/vim/logger.rb +0 -18
  73. data/lib/debugger/xml/vim/notification.rb +0 -37
  74. data/lib/debugger/xml/vim/processor.rb +0 -22
@@ -1,72 +0,0 @@
1
- module Debugger
2
- module Xml
3
- module Ide
4
- class Interface < Debugger::Interface # :nodoc:
5
- attr_accessor :command_queue
6
- attr_accessor :histfile
7
- attr_accessor :history_save
8
- attr_accessor :history_length
9
- attr_accessor :restart_file
10
-
11
- def initialize(socket)
12
- @command_queue = []
13
- @socket = socket
14
- @history_save = false
15
- @history_length = 256
16
- @histfile = ''
17
- @restart_file = nil
18
- end
19
-
20
- def close
21
- @socket.close
22
- rescue Exception
23
- end
24
-
25
- def print_debug(msg)
26
- STDOUT.puts(msg)
27
- end
28
-
29
- def errmsg(*args)
30
- print(*args)
31
- end
32
-
33
- def confirm(prompt)
34
- true
35
- end
36
-
37
- def finalize
38
- close
39
- end
40
-
41
- # Workaround for JRuby issue http://jira.codehaus.org/browse/JRUBY-2063
42
- def non_blocking_gets
43
- loop do
44
- result, _, _ = IO.select([@socket], nil, nil, 0.2)
45
- next unless result
46
- return result[0].gets
47
- end
48
- end
49
-
50
- def read_command(*args)
51
- result = non_blocking_gets
52
- raise IOError unless result
53
- result.chomp.tap do |r|
54
- Xml.logger.puts("Read command: #{r}")
55
- end
56
- end
57
-
58
- def readline_support?
59
- false
60
- end
61
-
62
- def print(*args)
63
- escaped_args = escape_input(args)
64
- value = escaped_args.first % escaped_args[1..-1]
65
- Xml.logger.puts("Going to print: #{value}")
66
- @socket.print(value)
67
- end
68
-
69
- end
70
- end
71
- end
72
- end
@@ -1,11 +0,0 @@
1
- module Debugger
2
- module Xml
3
- module Ide
4
- class Logger
5
- def puts(string)
6
- $stderr.puts(string)
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,94 +0,0 @@
1
- require 'ruby-debug/processor'
2
-
3
- module Debugger
4
- module Xml
5
- module Ide
6
-
7
- class Processor < Debugger::Processor
8
- attr_reader :context, :file, :line, :display
9
- def initialize(interface)
10
- @mutex = Mutex.new
11
- @interface = interface
12
- @display = []
13
- end
14
-
15
- def at_breakpoint(context, breakpoint)
16
- raise "@last_breakpoint supposed to be nil. is #{@last_breakpoint}" if @last_breakpoint
17
- # at_breakpoint is immediately followed by #at_line event. So postpone breakpoint printing until #at_line.
18
- @last_breakpoint = breakpoint
19
- end
20
- protect :at_breakpoint
21
-
22
- # TODO: Catching exceptions doesn't work so far, need to fix
23
- def at_catchpoint(context, excpt)
24
- end
25
-
26
- # We don't have tracing for IDE
27
- def at_tracing(*args)
28
- end
29
-
30
- def at_line(context, file, line)
31
- if context.nil? || context.stop_reason == :step
32
- print_file_line(context, file, line)
33
- end
34
- line_event(context, file, line)
35
- end
36
- protect :at_line
37
-
38
- def at_return(context, file, line)
39
- print_file_line(context, file, line)
40
- context.stop_frame = -1
41
- line_event(context, file, line)
42
- end
43
-
44
- def at_line?
45
- !!@line
46
- end
47
-
48
- private
49
-
50
- def print_file_line(context, file, line)
51
- print(
52
- Debugger.printer.print(
53
- "stop.suspend",
54
- file: CommandProcessor.canonic_file(file), line_number: line, line: Debugger.line_at(file, line),
55
- thnum: context && context.thnum, frames: context && context.stack_size
56
- )
57
- )
58
- end
59
-
60
- def line_event(context, file, line)
61
- @line = line
62
- @file = file
63
- @context = context
64
- if @last_breakpoint
65
- # followed after #at_breakpoint in the same thread. Print breakpoint
66
- # now when @line, @file and @context are correctly set to prevent race
67
- # condition with `control thread'.
68
- n = Debugger.breakpoints.index(@last_breakpoint) + 1
69
- print pr("breakpoints.stop_at_breakpoint",
70
- id: n, file: @file, line: @line, thread_id: Debugger.current_context.thnum
71
- )
72
- end
73
- if @context && @context.thread.is_a?(Debugger::DebugThread)
74
- raise pr("thread.errors.debug_trace", thread: @context.thread)
75
- end
76
- # will be resumed by commands like `step', `next', `continue', `finish'
77
- # from `control thread'
78
- stop_thread
79
- ensure
80
- @line = nil
81
- @file = nil
82
- @context = nil
83
- @last_breakpoint = nil
84
- InspectCommand.clear_references
85
- end
86
-
87
- def stop_thread
88
- Thread.stop
89
- end
90
- end
91
-
92
- end
93
- end
94
- end
@@ -1,49 +0,0 @@
1
- module Debugger
2
- module Xml
3
- module MultiProcess
4
- def self.create_mp_fork(private=false)
5
- %Q{
6
- alias pre_debugger_fork fork
7
-
8
- #{private ? "private" : ""}
9
- def fork(*args)
10
- if block_given?
11
- return pre_debugger_fork{Debugger::Xml::MultiProcess::pre_child; yield}
12
- end
13
- result = pre_debugger_fork
14
- Debugger::Xml::MultiProcess::pre_child unless result
15
- result
16
- end
17
- }
18
- end
19
-
20
- def self.create_mp_exec(private=false)
21
- %Q{
22
- alias pre_debugger_exec exec
23
-
24
- #{private ? "private" : ""}
25
- def exec(*args)
26
- Debugger.handler.interface.close
27
- pre_debugger_exec(*args)
28
- end
29
- }
30
- end
31
- end
32
- end
33
- end
34
-
35
- module Kernel
36
- class << self
37
- module_eval Debugger::Xml::MultiProcess.create_mp_fork
38
- module_eval Debugger::Xml::MultiProcess.create_mp_exec
39
- end
40
- module_eval Debugger::Xml::MultiProcess.create_mp_fork(true)
41
- module_eval Debugger::Xml::MultiProcess.create_mp_exec(true)
42
- end
43
-
44
- module Process
45
- class << self
46
- module_eval Debugger::Xml::MultiProcess.create_mp_fork
47
- module_eval Debugger::Xml::MultiProcess.create_mp_exec
48
- end
49
- end
@@ -1,81 +0,0 @@
1
- module Debugger
2
- module Xml
3
- module MultiProcess
4
- class << self
5
- def pre_child
6
- return unless ENV['IDE_PROCESS_DISPATCHER']
7
-
8
- require 'socket'
9
- require 'ostruct'
10
-
11
- host = ENV['DEBUGGER_HOST']
12
- port = find_free_port(host)
13
-
14
- options = OpenStruct.new(
15
- host: host,
16
- port: port,
17
- stop: false,
18
- tracing: false,
19
- wait_for_start: true,
20
- int_handler: true,
21
- debug_mode: (ENV['DEBUGGER_DEBUG_MODE'] == 'true'),
22
- dispatcher_port: ENV['IDE_PROCESS_DISPATCHER']
23
- )
24
-
25
- acceptor_host, acceptor_port = ENV['IDE_PROCESS_DISPATCHER'].split(":")
26
- acceptor_host, acceptor_port = '127.0.0.1', acceptor_host unless acceptor_port
27
-
28
- connected = false
29
- 3.times do |i|
30
- begin
31
- s = TCPSocket.open(acceptor_host, acceptor_port)
32
- s.print(port)
33
- s.close
34
- connected = true
35
- start_debugger(options)
36
- return
37
- rescue => bt
38
- $stderr.puts "#{Process.pid}: connection failed(#{i+1})"
39
- $stderr.puts "Exception: #{bt}"
40
- $stderr.puts bt.backtrace.map { |l| "\t#{l}" }.join("\n")
41
- sleep 0.3
42
- end unless connected
43
- end
44
- end
45
-
46
- def start_debugger(options)
47
- if Debugger.started?
48
- # we're in forked child, only need to restart control thread
49
- Debugger.breakpoints.clear
50
- Debugger.control_thread = nil
51
- end
52
-
53
- if options.int_handler
54
- # install interruption handler
55
- trap('INT') { Debugger.interrupt_last }
56
- end
57
-
58
- # set options
59
- Debugger.tracing = options.tracing
60
- Debugger.wait_for_start = options.wait_for_start
61
- Debugger.wait_connection = true
62
- Debugger.printer = Printers::Xml.new
63
- Debugger::Xml.logger = if options.debug_mode
64
- Debugger::Xml::Ide::Logger.new
65
- else
66
- Debugger::Xml::FakeLogger.new
67
- end
68
- Debugger.start_remote_ide(options.host, options.port)
69
- end
70
-
71
-
72
- def find_free_port(host)
73
- server = TCPServer.open(host, 0)
74
- port = server.addr[1]
75
- server.close
76
- port
77
- end
78
- end
79
- end
80
- end
81
- end
@@ -1,5 +0,0 @@
1
- module Debugger
2
- module Xml
3
- VERSION = "0.3.3"
4
- end
5
- end
@@ -1,19 +0,0 @@
1
- require 'debugger/xml/ide/control_command_processor'
2
-
3
- module Debugger
4
- module Xml
5
- module Vim
6
-
7
- class ControlCommandProcessor < Ide::ControlCommandProcessor
8
- private
9
-
10
- def process_input(input)
11
- super(input)
12
- @interface.send_response
13
- end
14
-
15
- end
16
- end
17
- end
18
- end
19
-
@@ -1,42 +0,0 @@
1
- require 'debugger/xml/ide/interface'
2
-
3
- module Debugger
4
- module Xml
5
- module Vim
6
- class Interface < Ide::Interface
7
- def initialize(socket, options)
8
- super(socket)
9
- @options = options
10
- @output = []
11
- end
12
-
13
- def print(*args)
14
- escaped_args = escape_input(args)
15
- value = escaped_args.first % escaped_args[1..-1]
16
- Xml.logger.puts("Going to print: #{value}")
17
- @output << sprintf(value)
18
- end
19
-
20
- def send_response
21
- create_directory(@options.file)
22
- message = @output.join(@options.separator)
23
- @output.clear
24
- unless message.empty?
25
- File.open(@options.file, 'w') do |f|
26
- f.puts(message)
27
- end
28
- Notification.new("receive_command", @options).send
29
- end
30
- end
31
-
32
- private
33
-
34
- def create_directory(file)
35
- dir = File.dirname(file)
36
- Dir.mkdir(dir) unless File.exist?(dir) && File.directory?(dir)
37
- end
38
-
39
- end
40
- end
41
- end
42
- end
@@ -1,18 +0,0 @@
1
- module Debugger
2
- module Xml
3
- module Vim
4
- class Logger
5
- def initialize(logger_file)
6
- @logger_file = logger_file
7
- end
8
-
9
- def puts(string)
10
- File.open(@logger_file, 'a') do |f|
11
- # match vim redir style new lines, rather than trailing
12
- f << "\ndebugger-xml, #{Time.now.strftime("%H:%M:%S")} : #{string.chomp}"
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,37 +0,0 @@
1
- module Debugger
2
- module Xml
3
- module Vim
4
- class Notification
5
-
6
- def initialize(command, options)
7
- @command = command
8
- @executable = options.vim_executable
9
- @servername = options.vim_servername
10
- @debug_mode = options.debug_mode
11
- @logger_file = options.logger_file
12
- end
13
-
14
- def send
15
- command = ":call RubyDebugger.#{@command}()"
16
- starter = "<C-\\\\>"
17
- sys_cmd = "#{@executable} --servername #{@servername} -u NONE -U NONE " +
18
- "--remote-send \"#{starter}<C-N>#{command}<CR>\""
19
- log("Executing command: #{sys_cmd}")
20
- system(sys_cmd);
21
- end
22
-
23
- private
24
-
25
- def log(string)
26
- if @debug_mode
27
- File.open(@logger_file, 'a') do |f|
28
- # match vim redir style new lines, rather than trailing
29
- f << "\ndebugger-xml, #{Time.now.strftime("%H:%M:%S")} : #{string.chomp}"
30
- end
31
- end
32
- end
33
-
34
- end
35
- end
36
- end
37
- end
@@ -1,22 +0,0 @@
1
- require 'ruby-debug/processor'
2
- require 'debugger/xml/ide/processor'
3
-
4
- module Debugger
5
- module Xml
6
- module Vim
7
-
8
- class Processor < Ide::Processor
9
- private
10
- def stop_thread
11
- processor = Vim::ControlCommandProcessor.new(@interface)
12
- processor.process_command("where")
13
- processor.process_command("var local")
14
- @interface.send_response
15
- super
16
- end
17
- end
18
-
19
- end
20
- end
21
- end
22
-