debug 1.0.0.beta5 → 1.0.0.beta6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'color'
2
4
 
3
5
  module DEBUGGER__
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'objspace'
2
4
  require 'pp'
3
5
 
@@ -136,6 +138,11 @@ module DEBUGGER__
136
138
  wait_next_action
137
139
  end
138
140
 
141
+ def on_init name
142
+ event! :init, name
143
+ wait_next_action
144
+ end
145
+
139
146
  def on_breakpoint tp, bp
140
147
  on_suspend tp.event, tp, bp: bp
141
148
  end
@@ -394,7 +401,7 @@ module DEBUGGER__
394
401
  end
395
402
  end
396
403
 
397
- def add_breakpoint args
404
+ def make_breakpoint args
398
405
  case args.first
399
406
  when :method
400
407
  klass_name, op, method_name, cond = args[1..]
@@ -405,7 +412,11 @@ module DEBUGGER__
405
412
  puts e.message
406
413
  ::DEBUGGER__::METHOD_ADDED_TRACKER.enable
407
414
  end
408
- event! :result, :method_breakpoint, bp
415
+
416
+ bp
417
+ when :watch
418
+ ivar, object, result = args[1..]
419
+ WatchIVarBreakpoint.new(ivar, object, result)
409
420
  else
410
421
  raise "unknown breakpoint: #{args}"
411
422
  end
@@ -437,11 +448,15 @@ module DEBUGGER__
437
448
  frame = @target_frames.first
438
449
  path = frame.location.absolute_path || "!eval:#{frame.path}"
439
450
  line = frame.location.lineno
440
- frame.iseq.traceable_lines_norec(lines = {})
441
- next_line = lines.keys.bsearch{|e| e > line}
442
- if !next_line && (last_line = frame.iseq.last_line) > line
443
- next_line = last_line
451
+
452
+ if frame.iseq
453
+ frame.iseq.traceable_lines_norec(lines = {})
454
+ next_line = lines.keys.bsearch{|e| e > line}
455
+ if !next_line && (last_line = frame.iseq.last_line) > line
456
+ next_line = last_line
457
+ end
444
458
  end
459
+
445
460
  depth = @target_frames.first.frame_depth
446
461
 
447
462
  step_tp{
@@ -469,17 +484,14 @@ module DEBUGGER__
469
484
  when :eval
470
485
  eval_type, eval_src = *args
471
486
 
472
- case eval_type
473
- when :display, :try_display
474
- else
475
- result = frame_eval(eval_src)
476
- end
477
487
  result_type = nil
478
488
 
479
489
  case eval_type
480
490
  when :p
491
+ result = frame_eval(eval_src)
481
492
  puts "=> " + result.inspect
482
493
  when :pp
494
+ result = frame_eval(eval_src)
483
495
  puts "=> "
484
496
  PP.pp(result, out = ''.dup, SESSION.width)
485
497
  puts out
@@ -497,23 +509,6 @@ module DEBUGGER__
497
509
 
498
510
  result_type = eval_type
499
511
  result = failed_results
500
- when :watch
501
- if @success_last_eval
502
- if eval_src.match?(/@\w+/)
503
- object =
504
- if b = current_frame.binding
505
- b.receiver
506
- else
507
- current_frame.self
508
- end
509
- puts "#{object} #{eval_src} = #{result}"
510
- result = WatchIVarBreakpoint.new(eval_src, object, result)
511
- end
512
-
513
- result_type = :watch
514
- else
515
- result = nil
516
- end
517
512
  else
518
513
  raise "unknown error option: #{args.inspect}"
519
514
  end
@@ -576,13 +571,30 @@ module DEBUGGER__
576
571
  end
577
572
 
578
573
  event! :result, nil
579
-
580
574
  when :breakpoint
581
- add_breakpoint args
575
+ case args[0]
576
+ when :method
577
+ bp = make_breakpoint args
578
+ event! :result, :method_breakpoint, bp
579
+ when :watch
580
+ ivar = args[1]
581
+ result = frame_eval(ivar)
582
582
 
583
+ if @success_last_eval
584
+ object =
585
+ if b = current_frame.binding
586
+ b.receiver
587
+ else
588
+ current_frame.self
589
+ end
590
+ bp = make_breakpoint [:watch, ivar, object, result]
591
+ event! :result, :watch_breakpoint, bp
592
+ else
593
+ event! :result, nil
594
+ end
595
+ end
583
596
  when :dap
584
597
  process_dap args
585
-
586
598
  else
587
599
  raise [cmd, *args].inspect
588
600
  end
data/lib/debug/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DEBUGGER__
2
- VERSION = "1.0.0.beta5"
4
+ VERSION = "1.0.0.beta6"
3
5
  end
data/misc/README.md.erb CHANGED
@@ -11,7 +11,7 @@ New debug.rb has several advantages:
11
11
  * Remote debugging: Support remote debugging natively.
12
12
  * UNIX domain socket
13
13
  * TCP/IP
14
- * VSCode/DAP integration (TODO)
14
+ * VSCode/DAP integration ([VSCode rdbg Ruby Debugger - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg))
15
15
  * Extensible: application can introduce debugging support with several methods
16
16
  * By `rdbg` command
17
17
  * By loading libraries with `-r` command line option
@@ -29,6 +29,16 @@ $ gem install debug --pre
29
29
 
30
30
  or specify `-Ipath/to/debug/lib` in `RUBYOPT` or each ruby command-line option, especially for debug this gem development.
31
31
 
32
+ If you use Bundler, write the following line to your Gemfile. And use rdbg command with -c option.
33
+
34
+ ```
35
+ gem "debug", ">= 1.0.0.beta"
36
+ ```
37
+
38
+ ```
39
+ $ rdbg -c bundle exec ruby target.rb
40
+ ```
41
+
32
42
  # How to use
33
43
 
34
44
  ## Invoke with debugger
@@ -70,10 +80,6 @@ $ ruby -r debug/run target.rb
70
80
  # target.rb
71
81
  require 'debug/run' # start the debug console
72
82
 
73
- # or
74
-
75
- require 'debug/session' # introduce the functionality
76
- DEBUGGER__.console # and start the debug console
77
83
  # ... rest of program ...
78
84
  ```
79
85
 
@@ -300,11 +306,9 @@ $ rdbg --attach hostname 12345
300
306
 
301
307
  ### Initial scripts
302
308
 
303
- If there are `.rdbgrc` files are there at the current directory and the home directory, files are loaded as initial scripts which contains debugger commands. `RUBY_DEBUG_INIT_SCRIPT` environment variable can specify the initial script file.
304
-
305
- Initial scripts are evaluated at the first suspend timing (generally, it is the beginning of the target script). For example, you can set break points with `break file:123`.
309
+ If there are `~/.rdbgrc`, the file is loaded as initial scripts which contains debugger commands at the beginning of debug session. `RUBY_DEBUG_INIT_SCRIPT` environment variable can specify the initial script file. You can write configurations in a file. For example, you can set break points with `break file:123` in `~/.rdbgrc`.
306
310
 
307
- If there are `.rdbgrc.rb` files at the current directory and the home directory, files are loaded as a ruby script at the initializing timing.
311
+ If there are `~/.rdbgrc.rb` is available, it is loaded as a ruby script at same timing.
308
312
 
309
313
  ### Environment variables
310
314
 
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.0.0.beta5
4
+ version: 1.0.0.beta6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi Sasada
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-17 00:00:00.000000000 Z
11
+ date: 2021-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: irb
@@ -43,6 +43,7 @@ files:
43
43
  - Rakefile
44
44
  - TODO.md
45
45
  - bin/console
46
+ - bin/gentest
46
47
  - bin/setup
47
48
  - debug.gemspec
48
49
  - exe/rdbg
@@ -63,7 +64,6 @@ files:
63
64
  - lib/debug/server_dap.rb
64
65
  - lib/debug/session.rb
65
66
  - lib/debug/source_repository.rb
66
- - lib/debug/test_console.rb
67
67
  - lib/debug/thread_client.rb
68
68
  - lib/debug/version.rb
69
69
  - misc/README.md.erb
File without changes