debug 1.7.0 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14d08935b209386adbc7a1172ae0d43feb7bf31c9483aa177946fa0669db69e8
4
- data.tar.gz: '01917758f048b2927a6e42b8965985477fed13011b3cd7626220ea8d1aad42fd'
3
+ metadata.gz: a84e87e9582c98cf24ca8aa9f1f30032c10736bf4dbc1c44da016db564a7a574
4
+ data.tar.gz: da093ef6ebfd8fc5e4a10fcc39c59826e45829ec09da0d9dc164b9cd71085286
5
5
  SHA512:
6
- metadata.gz: 6381058fe16c43d79afdc04db1dcfcff6bd3c65216ce9bc9a03b02c26dbe098011879128c2e4f3ed31b1f7cf279b590fd641b4030f6cb6308434d65d17e51110
7
- data.tar.gz: c2896cca900dea7f5f4456b30f8dc4ecbed6886da74c46033e82bcda37da561759f2bd3b9a702eef7603785c17989f437b4f186817ad458edd16371c7b879688
6
+ metadata.gz: d663b6db0dba8921aaaa535f834e768367e07fef03613e6a277a27724fb75ecf830c7557465521998d42cbb41744e6335495958f626285468d6e38ae6ec52515
7
+ data.tar.gz: cb24e62c5875c069812ff1b056dda3b912a20069d09123b72dbd0da69e61aed66968bc4dc5f80e9b599df743fb7755a2399f1461f344fc43ed9ea6bbf20f251c
data/TODO.md CHANGED
@@ -2,22 +2,22 @@
2
2
 
3
3
  ## Basic functionality
4
4
 
5
- * Support Ractors
6
- * Signal (SIGINT) trap handling
5
+ * Support Fibers and Ractors
7
6
 
8
7
  ## UI
9
8
 
9
+ * Multi-line support
10
10
  * Completion for Ruby's code
11
11
  * Interactive breakpoint setting
12
12
  * Interactive record & play debugging
13
13
  * irb integration
14
- * Web browser integrated UI
15
- * History file
16
14
 
17
15
  ## Debug command
18
16
 
19
- * Breakpoints
20
- * Lightweight pending method break points with Ruby 3.1 feature (TP:method_added)
21
17
  * Watch points
22
- * Lightweight watchpoints for instance variables with Ruby 3.1 features (TP:ivar_set)
23
- * Faster `next`/`finish` command by specifying target code.
18
+ * Lightweight watchpoints for instance variables with Ruby 3.3 features (TP:ivar_set)
19
+ * Alias
20
+
21
+ ## Debug port
22
+
23
+ * Debug port for monitoring
data/lib/debug/prelude.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  return if ENV['RUBY_DEBUG_ENABLE'] == '0'
4
- return if defined?(::DEBUGGER__)
4
+ return if defined?(::DEBUGGER__::Session)
5
5
 
6
6
  # Put the following line in your login script (e.g. ~/.bash_profile) with modified path:
7
7
  #
@@ -34,25 +34,26 @@ module DEBUGGER__
34
34
 
35
35
  loop do
36
36
  res = ws_client.extract_data
37
- case
38
- when res['id'] == 1 && target_info = res.dig('result', 'targetInfos')
37
+ case res['id']
38
+ when 1
39
+ target_info = res.dig('result', 'targetInfos')
39
40
  page = target_info.find{|t| t['type'] == 'page'}
40
41
  ws_client.send id: 2, method: 'Target.attachToTarget',
41
42
  params: {
42
43
  targetId: page['targetId'],
43
44
  flatten: true
44
45
  }
45
- when res['id'] == 2
46
+ when 2
46
47
  s_id = res.dig('result', 'sessionId')
47
48
  # TODO: change id
48
49
  ws_client.send sessionId: s_id, id: 100, method: 'Network.enable'
49
50
  ws_client.send sessionId: s_id, id: 3,
50
51
  method: 'Page.enable'
51
- when res['id'] == 3
52
+ when 3
52
53
  s_id = res['sessionId']
53
54
  ws_client.send sessionId: s_id, id: 4,
54
55
  method: 'Page.getFrameTree'
55
- when res['id'] == 4
56
+ when 4
56
57
  s_id = res['sessionId']
57
58
  f_id = res.dig('result', 'frameTree', 'frame', 'id')
58
59
  ws_client.send sessionId: s_id, id: 5,
@@ -61,17 +62,19 @@ module DEBUGGER__
61
62
  url: "devtools://devtools/bundled/inspector.html?v8only=true&panel=sources&ws=#{addr}/#{uuid}",
62
63
  frameId: f_id
63
64
  }
64
- when res['method'] == 'Network.webSocketWillSendHandshakeRequest'
65
- s_id = res['sessionId']
66
- # Display the console by entering ESC key
67
- ws_client.send sessionId: s_id, id: 101, # TODO: change id
68
- method:"Input.dispatchKeyEvent",
69
- params: {
70
- type:"keyDown",
71
- windowsVirtualKeyCode:27 # ESC key
72
- }
73
- when res['id'] == 101
65
+ when 101
74
66
  break
67
+ else
68
+ if res['method'] == 'Network.webSocketWillSendHandshakeRequest'
69
+ s_id = res['sessionId']
70
+ # Display the console by entering ESC key
71
+ ws_client.send sessionId: s_id, id: 101, # TODO: change id
72
+ method:"Input.dispatchKeyEvent",
73
+ params: {
74
+ type:"keyDown",
75
+ windowsVirtualKeyCode:27 # ESC key
76
+ }
77
+ end
75
78
  end
76
79
  end
77
80
  pid
@@ -696,6 +699,8 @@ module DEBUGGER__
696
699
  end
697
700
 
698
701
  class Session
702
+ include GlobalVariablesHelper
703
+
699
704
  # FIXME: unify this method with ThreadClient#propertyDescriptor.
700
705
  def get_type obj
701
706
  case obj
@@ -750,7 +755,7 @@ module DEBUGGER__
750
755
  fid = @frame_map[frame_id]
751
756
  request_tc [:cdp, :scope, req, fid]
752
757
  when 'global'
753
- vars = global_variables.sort.map do |name|
758
+ vars = safe_global_variables.sort.map do |name|
754
759
  gv = eval(name.to_s)
755
760
  prop = {
756
761
  name: name,
@@ -1040,7 +1045,7 @@ module DEBUGGER__
1040
1045
  case expr
1041
1046
  # Chrome doesn't read instance variables
1042
1047
  when /\A\$\S/
1043
- global_variables.each{|gvar|
1048
+ safe_global_variables.each{|gvar|
1044
1049
  if gvar.to_s == expr
1045
1050
  result = eval(gvar.to_s)
1046
1051
  break false
@@ -452,7 +452,11 @@ module DEBUGGER__
452
452
  @q_msg << req
453
453
 
454
454
  else
455
- raise "Unknown request: #{req.inspect}"
455
+ if respond_to? mid = "request_#{req['command']}"
456
+ send mid, req
457
+ else
458
+ raise "Unknown request: #{req.inspect}"
459
+ end
456
460
  end
457
461
  end
458
462
  ensure
@@ -516,6 +520,8 @@ module DEBUGGER__
516
520
  end
517
521
 
518
522
  class Session
523
+ include GlobalVariablesHelper
524
+
519
525
  def find_waiting_tc id
520
526
  @th_clients.each{|th, tc|
521
527
  return tc if tc.id == id && tc.waiting?
@@ -562,8 +568,12 @@ module DEBUGGER__
562
568
  if ref = @var_map[varid]
563
569
  case ref[0]
564
570
  when :globals
565
- vars = global_variables.sort.map do |name|
566
- gv = eval(name.to_s)
571
+ vars = safe_global_variables.sort.map do |name|
572
+ begin
573
+ gv = eval(name.to_s)
574
+ rescue Exception => e
575
+ gv = e.inspect
576
+ end
567
577
  {
568
578
  name: name,
569
579
  value: gv.inspect,
@@ -721,9 +731,8 @@ module DEBUGGER__
721
731
  end
722
732
 
723
733
  class ThreadClient
724
-
725
734
  MAX_LENGTH = 180
726
-
735
+
727
736
  def value_inspect obj, short: true
728
737
  # TODO: max length should be configuarable?
729
738
  str = DEBUGGER__.safe_inspect obj, short: short, max_length: MAX_LENGTH
@@ -735,6 +744,14 @@ module DEBUGGER__
735
744
  end
736
745
  end
737
746
 
747
+ def dap_eval b, expr, _context, prompt: '(repl_eval)'
748
+ begin
749
+ b.eval(expr.to_s, prompt)
750
+ rescue Exception => e
751
+ e
752
+ end
753
+ end
754
+
738
755
  def process_dap args
739
756
  # pp tc: self, args: args
740
757
  type = args.shift
@@ -800,7 +817,7 @@ module DEBUGGER__
800
817
  name: 'Global variables',
801
818
  presentationHint: 'globals',
802
819
  variablesReference: 1, # GLOBAL
803
- namedVariables: global_variables.size,
820
+ namedVariables: safe_global_variables.size,
804
821
  indexedVariables: 0,
805
822
  expensive: false,
806
823
  }]
@@ -837,10 +854,11 @@ module DEBUGGER__
837
854
  }
838
855
  when String
839
856
  vars = [
840
- variable('#length', obj.length),
857
+ variable('#lengthddsfsd', obj.length),
841
858
  variable('#encoding', obj.encoding),
842
859
  ]
843
- vars << variable('#dump', NaiveString.new(obj)) if obj.length > MAX_LENGTH
860
+ printed_str = value_inspect(obj)
861
+ vars << variable('#dump', NaiveString.new(obj)) if printed_str.end_with?('...')
844
862
  when Class, Module
845
863
  vars << variable('%ancestors', obj.ancestors[1..])
846
864
  when Range
@@ -872,12 +890,7 @@ module DEBUGGER__
872
890
 
873
891
  case context
874
892
  when 'repl', 'watch'
875
- begin
876
- result = b.eval(expr.to_s, '(DEBUG CONSOLE)')
877
- rescue Exception => e
878
- result = e
879
- end
880
-
893
+ result = dap_eval b, expr, context, prompt: '(DEBUG CONSOLE)'
881
894
  when 'hover'
882
895
  case expr
883
896
  when /\A\@\S/
@@ -887,7 +900,7 @@ module DEBUGGER__
887
900
  message = "Error: Not defined instance variable: #{expr.inspect}"
888
901
  end
889
902
  when /\A\$\S/
890
- global_variables.each{|gvar|
903
+ safe_global_variables.each{|gvar|
891
904
  if gvar.to_s == expr
892
905
  result = eval(gvar.to_s)
893
906
  break false
@@ -29,7 +29,7 @@ module DEBUGGER__
29
29
  end
30
30
 
31
31
  def skip_internal_path?(path)
32
- path.start_with?(__dir__) || path.start_with?('<internal:')
32
+ path.start_with?(__dir__) || path.delete_prefix('!eval:').start_with?('<internal:')
33
33
  end
34
34
 
35
35
  def skip_location?(loc)
@@ -38,6 +38,13 @@ module DEBUGGER__
38
38
  end
39
39
  end
40
40
 
41
+ module GlobalVariablesHelper
42
+ SKIP_GLOBAL_LIST = %i[$= $KCODE $-K $SAFE].freeze
43
+ def safe_global_variables
44
+ global_variables.reject{|name| SKIP_GLOBAL_LIST.include? name }
45
+ end
46
+ end
47
+
41
48
  class ThreadClient
42
49
  def self.current
43
50
  if thc = Thread.current[:DEBUGGER__ThreadClient]
@@ -50,6 +57,7 @@ module DEBUGGER__
50
57
 
51
58
  include Color
52
59
  include SkipPathHelper
60
+ include GlobalVariablesHelper
53
61
 
54
62
  attr_reader :thread, :id, :recorder, :check_bp_fulfillment_map
55
63
 
@@ -636,9 +644,8 @@ module DEBUGGER__
636
644
  end
637
645
  end
638
646
 
639
- SKIP_GLOBAL_LIST = %i[$= $KCODE $-K $SAFE].freeze
640
647
  def show_globals pat
641
- global_variables.sort.each{|name|
648
+ safe_global_variables.sort.each{|name|
642
649
  next if SKIP_GLOBAL_LIST.include? name
643
650
 
644
651
  value = eval(name.to_s)
data/lib/debug/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DEBUGGER__
4
- VERSION = "1.7.0"
4
+ VERSION = "1.7.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debug
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi Sasada
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-02 00:00:00.000000000 Z
11
+ date: 2022-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: irb