debug 1.0.0.beta5 → 1.0.0.beta6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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