byebug 2.7.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -6
- data/.travis.yml +1 -0
- data/CHANGELOG.md +23 -0
- data/Gemfile +9 -0
- data/README.md +35 -32
- data/Rakefile +1 -3
- data/byebug.gemspec +0 -6
- data/ext/byebug/byebug.c +64 -51
- data/ext/byebug/byebug.h +12 -13
- data/ext/byebug/context.c +28 -43
- data/ext/byebug/extconf.rb +6 -6
- data/lib/byebug.rb +34 -38
- data/lib/byebug/command.rb +4 -2
- data/lib/byebug/commands/continue.rb +0 -1
- data/lib/byebug/commands/control.rb +0 -1
- data/lib/byebug/commands/edit.rb +1 -1
- data/lib/byebug/commands/finish.rb +10 -16
- data/lib/byebug/commands/help.rb +1 -1
- data/lib/byebug/commands/kill.rb +1 -1
- data/lib/byebug/commands/quit.rb +1 -1
- data/lib/byebug/commands/repl.rb +3 -3
- data/lib/byebug/commands/set.rb +24 -39
- data/lib/byebug/commands/show.rb +39 -112
- data/lib/byebug/commands/stepping.rb +0 -2
- data/lib/byebug/commands/threads.rb +0 -5
- data/lib/byebug/commands/trace.rb +1 -1
- data/lib/byebug/commands/variables.rb +1 -1
- data/lib/byebug/context.rb +8 -12
- data/lib/byebug/helper.rb +1 -1
- data/lib/byebug/history.rb +46 -0
- data/lib/byebug/interface.rb +5 -5
- data/lib/byebug/interfaces/local_interface.rb +11 -62
- data/lib/byebug/interfaces/remote_interface.rb +6 -22
- data/lib/byebug/interfaces/script_interface.rb +2 -17
- data/lib/byebug/processor.rb +4 -4
- data/lib/byebug/{command_processor.rb → processors/command_processor.rb} +7 -14
- data/lib/byebug/{control_command_processor.rb → processors/control_command_processor.rb} +3 -7
- data/lib/byebug/version.rb +1 -1
- data/test/edit_test.rb +6 -6
- data/test/examples/breakpoint_deep.rb +1 -1
- data/test/finish_test.rb +6 -6
- data/test/help_test.rb +1 -1
- data/test/info_test.rb +0 -1
- data/test/kill_test.rb +2 -2
- data/test/post_mortem_test.rb +35 -219
- data/test/quit_test.rb +2 -2
- data/test/restart_test.rb +12 -33
- data/test/set_test.rb +80 -107
- data/test/show_test.rb +42 -77
- data/test/stepping_test.rb +1 -1
- data/test/support/test_dsl.rb +4 -25
- data/test/support/test_interface.rb +40 -48
- data/test/test_helper.rb +1 -3
- data/test/timeout_test.rb +9 -0
- metadata +8 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aefd49bb6a9a42bed03f3bfd3e5c05b260460e16
|
4
|
+
data.tar.gz: 2123202331fe1df741b263453e287273383aeb3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27cb2714d6b8d457aed200e9c5beabaad6d94912e4ecc78c2bbdd3e809d8dce76834d49fdb02fbd89814c3e9bdeb01df5c9346ec777f5a9f4ca3f1fbab94b908
|
7
|
+
data.tar.gz: 72a02e12800f4b7b39d8b6f6b54615046ca80b7a774109ef60c5f18cfc4a959785a804f5ab204e926d984d7421c2c7f430f56a6f273c45ed1643a76627ea9398
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
# 3.0.0
|
2
|
+
|
3
|
+
- Bugfixes
|
4
|
+
* Fix post_mortem mode
|
5
|
+
* Command history is also saved after regular program termination, not only
|
6
|
+
after quitting with the `q` command.
|
7
|
+
* Fix failure when calling Byebug.start with Timeout::timeout (see #54), thanks
|
8
|
+
@zmoazeni!
|
9
|
+
|
10
|
+
- Changes
|
11
|
+
* `show commands` command for listing history of previous byebug commands now
|
12
|
+
behaves like shell's `history` command.
|
13
|
+
* Changes in `history` commands: see
|
14
|
+
[50e6ad8](https://github.com/deivid-rodriguez/byebug/commit/50e6ad8)
|
15
|
+
* Changes in `finish` semantics and in the C extension API: see
|
16
|
+
[61f9b4d](https://github.com/deivid-rodriguez/byebug/commit/61f9b4d)
|
17
|
+
* The `init` option for Byebug.start has been removed. Information to make the
|
18
|
+
`restart` command work is always saved now.
|
19
|
+
|
20
|
+
- Features
|
21
|
+
* Allow disabling post_mortem mode
|
22
|
+
|
23
|
+
|
1
24
|
# 2.7.0
|
2
25
|
* Bugfix release (#52, #53 and #54)
|
3
26
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -51,25 +51,20 @@ doesn't need them anymore so my recommendation is not to use them.
|
|
51
51
|
|
52
52
|
## What's different from debugger
|
53
53
|
|
54
|
-
* Works on Ruby 2.x
|
55
|
-
|
56
|
-
*
|
57
|
-
|
58
|
-
|
54
|
+
* Works on Ruby 2.x but it doesn't on 1.9.x (you should probably upgrade
|
55
|
+
anyways).
|
56
|
+
* Has no MRI internal source code dependencies, just a clean API (no more `bump
|
57
|
+
ruby_core_source dependency` entries in CHANGELOG, no more broken debugger's on
|
58
|
+
ruby's releases).
|
59
|
+
* Fixes a lot of debugger's issues, such as ruby 2.x support or post_mortem
|
60
|
+
debugging. It also provides several enhancements, such as the fact the `byebug`
|
61
|
+
can now be placed at the end of a block or method call.
|
59
62
|
* Actively mantained.
|
60
63
|
* Editor agnostic: no external editor built-in support.
|
61
64
|
* Pry command is built-in. No need of external gem like debugger-pry.
|
62
65
|
|
63
66
|
|
64
|
-
##
|
65
|
-
|
66
|
-
Byebug tries to follow [semantic versioning](http://semver.org). Backwards
|
67
|
-
compatibility doesn't seem like a critic issue for a debugger because it's not
|
68
|
-
supposed to be used permanently by any program, let alone in production
|
69
|
-
environments. However, I still like the idea of giving some meaning to version
|
70
|
-
changes.
|
71
|
-
|
72
|
-
Byebug's public API is determined by its set of commands
|
67
|
+
## Byebug's commands
|
73
68
|
|
74
69
|
Command | Aliases | Subcommands
|
75
70
|
----------- |:------------ |:-----------
|
@@ -102,8 +97,8 @@ Byebug's public API is determined by its set of commands
|
|
102
97
|
`reload` | |
|
103
98
|
`restart` | |
|
104
99
|
`save` | |
|
105
|
-
`set` | | `args` `autoeval` `autoirb` `autolist` `autoreload` `basename` `callstyle` `callstyle` `forcestep` `fullpath` `
|
106
|
-
`show` | | `args` `autoeval` `autoirb` `autolist` `autoreload` `basename` `callstyle` `callstyle` `commands` `forcestep` `fullpath` `
|
100
|
+
`set` | | `args` `autoeval` `autoirb` `autolist` `autoreload` `autosave` `basename` `callstyle` `callstyle` `forcestep` `fullpath` `histfile` `histsize` `linetrace` `linetrace_plus` `listsize` `post_mortem` `stack_on_error` `testing` `verbose` `width`
|
101
|
+
`show` | | `args` `autoeval` `autoirb` `autolist` `autoreload` `autosave` `basename` `callstyle` `callstyle` `commands` `forcestep` `fullpath` `histfile` `histsize` `linetrace` `linetrace_plus` `listsize` `post_mortem` `stack_on_error` `verbose` `width`
|
107
102
|
`skip` | |
|
108
103
|
`source` | |
|
109
104
|
`step` | |
|
@@ -114,6 +109,15 @@ Byebug's public API is determined by its set of commands
|
|
114
109
|
`var` | | `class` `constant` `global` `instance` `local` `ct`
|
115
110
|
|
116
111
|
|
112
|
+
## Semantic Versioning
|
113
|
+
|
114
|
+
Byebug tries to follow [semantic versioning](http://semver.org) and tries to
|
115
|
+
bump major version only when backwards incompatible changes are released.
|
116
|
+
Backwards compatibility is targeted to
|
117
|
+
[pry-byebug](https://github.com/deivid-rodriguez/pry-byebug) and any other
|
118
|
+
plugins relying on `byebug`.
|
119
|
+
|
120
|
+
|
117
121
|
## Getting Started
|
118
122
|
|
119
123
|
Read [byebug's markdown
|
@@ -124,7 +128,7 @@ started. Proper documentation will be eventually written.
|
|
124
128
|
## Related projects
|
125
129
|
|
126
130
|
* [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug) adds `next`,
|
127
|
-
|
131
|
+
`step`, `finish`, `continue` and `break` commands to pry using byebug.
|
128
132
|
* [ruby-debug-passenger](https://github.com/davejamesmiller/ruby-debug-passenger)
|
129
133
|
adds a rake task that restarts Passenger with byebug connected.
|
130
134
|
* [minitest-byebug](https://github.com/kaspth/minitest-byebug) starts a byebug
|
@@ -133,35 +137,34 @@ session on minitest failures.
|
|
133
137
|
for ruby debugging on Sublime Text.
|
134
138
|
|
135
139
|
|
136
|
-
##
|
140
|
+
## TODO List (by priority)
|
137
141
|
|
138
|
-
*
|
139
|
-
* Libify and test byebug's executable.
|
142
|
+
* Write tests for remote debugging support.
|
140
143
|
* Add printers support.
|
141
|
-
|
144
|
+
* Libify and test byebug's executable.
|
145
|
+
* Support rubies other than MRI.
|
142
146
|
|
143
147
|
## Credits
|
144
148
|
|
145
149
|
Everybody who has ever contributed to this forked and reforked piece of
|
146
150
|
software, specially:
|
147
151
|
|
148
|
-
*
|
149
|
-
[
|
150
|
-
*
|
151
|
-
* Koichi Sasada, author of the new C debugging API for Ruby.
|
152
|
-
* Dennis Ushakov, author of [debase](https://github.com/denofevil/debase), the
|
152
|
+
* @ko1, author of the awesome TracePoint API for Ruby.
|
153
|
+
* @cldwalker, [debugger](https://github.com/cldwalker/debugger)'s mantainer.
|
154
|
+
* @denofevil, author of [debase](https://github.com/denofevil/debase), the
|
153
155
|
starting point of this.
|
154
156
|
* @kevjames3 for testing, bug reports and the interest in the project.
|
157
|
+
* @FooBarWidget for working and helping with remote debugging.
|
155
158
|
|
156
|
-
[VersionBadge]: https://badge.fury.io/rb/byebug.
|
159
|
+
[VersionBadge]: https://badge.fury.io/rb/byebug.svg
|
157
160
|
[VersionURL]: http://badge.fury.io/rb/byebug
|
158
|
-
[TravisBadge]: https://travis-ci.org/deivid-rodriguez/byebug.
|
161
|
+
[TravisBadge]: https://travis-ci.org/deivid-rodriguez/byebug.svg
|
159
162
|
[TravisURL]: http://travis-ci.org/deivid-rodriguez/byebug
|
160
|
-
[CodeClimateBadge]: https://
|
163
|
+
[CodeClimateBadge]: https://img.shields.io/codeclimate/github/deivid-rodriguez/byebug.svg
|
161
164
|
[CodeClimateURL]: https://codeclimate.com/github/deivid-rodriguez/byebug
|
162
|
-
[GemnasiumBadge]: https://gemnasium.com/deivid-rodriguez/byebug.
|
165
|
+
[GemnasiumBadge]: https://gemnasium.com/deivid-rodriguez/byebug.svg
|
163
166
|
[GemnasiumURL]: https://gemnasium.com/deivid-rodriguez/byebug
|
164
|
-
[CoverallsBadge]:
|
167
|
+
[CoverallsBadge]: http://img.shields.io/coveralls/deivid-rodriguez/byebug.svg
|
165
168
|
[CoverallsURL]: https://coveralls.io/r/deivid-rodriguez/byebug
|
166
|
-
[GittipBadge]: http://img.shields.io/gittip/deivid-rodriguez.
|
169
|
+
[GittipBadge]: http://img.shields.io/gittip/deivid-rodriguez.svg
|
167
170
|
[GittipURL]: https://www.gittip.com/deivid-rodriguez
|
data/Rakefile
CHANGED
@@ -22,9 +22,7 @@ task :test do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
task :default => :test
|
25
|
+
task default: :test
|
28
26
|
|
29
27
|
desc 'Run a test in looped mode so that you can look for memory leaks'
|
30
28
|
task 'test_loop' do
|
data/byebug.gemspec
CHANGED
@@ -25,10 +25,4 @@ Gem::Specification.new do |s|
|
|
25
25
|
|
26
26
|
s.add_dependency 'columnize', '~> 0.3'
|
27
27
|
s.add_dependency 'debugger-linecache', '~> 1.2'
|
28
|
-
|
29
|
-
s.add_development_dependency 'rake', '~> 10.1'
|
30
|
-
s.add_development_dependency 'rake-compiler', '~> 0.9'
|
31
|
-
s.add_development_dependency 'mocha', '~> 1.0'
|
32
|
-
s.add_development_dependency 'minitest', '~> 5.2'
|
33
|
-
s.add_development_dependency 'coveralls', '~> 0.7'
|
34
28
|
end
|
data/ext/byebug/byebug.c
CHANGED
@@ -10,6 +10,8 @@ static VALUE catchpoints = Qnil;
|
|
10
10
|
static VALUE breakpoints = Qnil;
|
11
11
|
static VALUE tracepoints = Qnil;
|
12
12
|
|
13
|
+
static VALUE raised_exception = Qnil;
|
14
|
+
|
13
15
|
/* Implements thread syncronization, we must stop threads when debugging */
|
14
16
|
VALUE locker = Qnil;
|
15
17
|
|
@@ -158,9 +160,8 @@ call_at_catchpoint(VALUE context_obj, debug_context_t *dc, VALUE exp)
|
|
158
160
|
static VALUE
|
159
161
|
call_at_return(VALUE context_obj, debug_context_t *dc, VALUE file, VALUE line)
|
160
162
|
{
|
161
|
-
dc
|
163
|
+
CTX_FL_UNSET(dc, CTX_FL_STOP_ON_RET);
|
162
164
|
return call_at(context_obj, dc, rb_intern("at_return"), 2, file, line);
|
163
|
-
|
164
165
|
}
|
165
166
|
|
166
167
|
static void
|
@@ -240,6 +241,9 @@ call_event(VALUE trace_point, void *data)
|
|
240
241
|
|
241
242
|
dc->calced_stack_size++;
|
242
243
|
|
244
|
+
if (CTX_FL_TEST(dc, CTX_FL_STOP_ON_RET))
|
245
|
+
dc->steps_out = dc->steps_out <= 0 ? -1 : dc->steps_out + 1;
|
246
|
+
|
243
247
|
EVENT_COMMON
|
244
248
|
|
245
249
|
breakpoint = Qnil;
|
@@ -269,7 +273,11 @@ return_event(VALUE trace_point, void *data)
|
|
269
273
|
|
270
274
|
EVENT_COMMON
|
271
275
|
|
272
|
-
if (dc->
|
276
|
+
if (dc->steps_out == 1)
|
277
|
+
{
|
278
|
+
dc->steps = 1;
|
279
|
+
}
|
280
|
+
else if ((dc->steps_out == 0) && (CTX_FL_TEST(dc, CTX_FL_STOP_ON_RET)))
|
273
281
|
{
|
274
282
|
VALUE file, line;
|
275
283
|
|
@@ -279,11 +287,7 @@ return_event(VALUE trace_point, void *data)
|
|
279
287
|
call_at_return(context, dc, file, line);
|
280
288
|
}
|
281
289
|
|
282
|
-
|
283
|
-
{
|
284
|
-
reset_stepping_stop_points(dc);
|
285
|
-
dc->steps = 1;
|
286
|
-
}
|
290
|
+
dc->steps_out = dc->steps_out <= 0 ? -1 : dc->steps_out - 1;
|
287
291
|
|
288
292
|
cleanup(dc);
|
289
293
|
}
|
@@ -315,60 +319,55 @@ c_return_event(VALUE trace_point, void *data)
|
|
315
319
|
static void
|
316
320
|
raise_event(VALUE trace_point, void *data)
|
317
321
|
{
|
318
|
-
VALUE expn_class,
|
319
|
-
VALUE
|
320
|
-
VALUE ancestors;
|
322
|
+
VALUE expn_class, ancestors;
|
323
|
+
VALUE path, lineno, binding, post_mortem_context;
|
321
324
|
int i;
|
322
325
|
debug_context_t *new_dc;
|
323
|
-
VALUE binding, path, lineno;
|
324
326
|
|
325
327
|
EVENT_SETUP
|
326
328
|
|
327
|
-
err = rb_errinfo();
|
328
|
-
|
329
329
|
EVENT_COMMON
|
330
330
|
|
331
|
-
|
332
|
-
|
333
|
-
|
331
|
+
path = rb_tracearg_path(trace_arg);
|
332
|
+
lineno = rb_tracearg_lineno(trace_arg);
|
333
|
+
binding = rb_tracearg_binding(trace_arg);
|
334
|
+
raised_exception = rb_tracearg_raised_exception(trace_arg);
|
334
335
|
|
335
336
|
if (post_mortem == Qtrue)
|
336
337
|
{
|
337
|
-
|
338
|
-
rb_ivar_set(
|
339
|
-
rb_ivar_set(
|
340
|
-
rb_ivar_set(
|
341
|
-
rb_ivar_set(
|
338
|
+
post_mortem_context = context_dup(dc);
|
339
|
+
rb_ivar_set(raised_exception, rb_intern("@__bb_file") , path);
|
340
|
+
rb_ivar_set(raised_exception, rb_intern("@__bb_line") , lineno);
|
341
|
+
rb_ivar_set(raised_exception, rb_intern("@__bb_binding"), binding);
|
342
|
+
rb_ivar_set(raised_exception, rb_intern("@__bb_context"), post_mortem_context);
|
342
343
|
|
343
|
-
Data_Get_Struct(
|
344
|
+
Data_Get_Struct(post_mortem_context, debug_context_t, new_dc);
|
344
345
|
rb_debug_inspector_open(context_backtrace_set, (void *)new_dc);
|
345
346
|
}
|
346
347
|
|
347
|
-
|
348
|
-
|
349
|
-
if (catchpoints == Qnil || dc->calced_stack_size == 0 ||
|
350
|
-
CTX_FL_TEST(dc, CTX_FL_CATCHING) ||
|
348
|
+
if (catchpoints == Qnil ||
|
349
|
+
dc->calced_stack_size == 0 ||
|
351
350
|
RHASH_TBL(catchpoints)->num_entries == 0)
|
352
351
|
{
|
353
352
|
cleanup(dc);
|
354
353
|
return;
|
355
354
|
}
|
356
355
|
|
356
|
+
expn_class = rb_obj_class(raised_exception);
|
357
357
|
ancestors = rb_mod_ancestors(expn_class);
|
358
358
|
for (i = 0; i < RARRAY_LENINT(ancestors); i++)
|
359
359
|
{
|
360
|
-
VALUE
|
361
|
-
VALUE hit_count;
|
360
|
+
VALUE ancestor_class, module_name, hit_count;
|
362
361
|
|
363
|
-
|
364
|
-
|
365
|
-
hit_count
|
362
|
+
ancestor_class = rb_ary_entry(ancestors, i);
|
363
|
+
module_name = rb_mod_name(ancestor_class);
|
364
|
+
hit_count = rb_hash_aref(catchpoints, module_name);
|
366
365
|
|
367
366
|
/* increment exception */
|
368
367
|
if (hit_count != Qnil)
|
369
368
|
{
|
370
|
-
rb_hash_aset(catchpoints,
|
371
|
-
call_at_catchpoint(context, dc,
|
369
|
+
rb_hash_aset(catchpoints, module_name, INT2FIX(FIX2INT(hit_count) + 1));
|
370
|
+
call_at_catchpoint(context, dc, raised_exception);
|
372
371
|
call_at_line(context, dc, path, lineno);
|
373
372
|
break;
|
374
373
|
}
|
@@ -678,7 +677,7 @@ bb_set_tracing(VALUE self, VALUE value)
|
|
678
677
|
* call-seq:
|
679
678
|
* Byebug.post_mortem? -> bool
|
680
679
|
*
|
681
|
-
* Returns +true+ if post-
|
680
|
+
* Returns +true+ if post-mortem debugging is enabled.
|
682
681
|
*/
|
683
682
|
static VALUE
|
684
683
|
bb_post_mortem(VALUE self)
|
@@ -739,6 +738,18 @@ bb_add_catchpoint(VALUE self, VALUE value)
|
|
739
738
|
return value;
|
740
739
|
}
|
741
740
|
|
741
|
+
/*
|
742
|
+
* call-seq:
|
743
|
+
* Byebug.raised_exception -> exception
|
744
|
+
*
|
745
|
+
* Returns raised exception when in post_mortem mode.
|
746
|
+
*/
|
747
|
+
static VALUE
|
748
|
+
bb_raised_exception(VALUE self)
|
749
|
+
{
|
750
|
+
return raised_exception;
|
751
|
+
}
|
752
|
+
|
742
753
|
/*
|
743
754
|
* Document-class: Byebug
|
744
755
|
*
|
@@ -752,22 +763,23 @@ Init_byebug()
|
|
752
763
|
{
|
753
764
|
mByebug = rb_define_module("Byebug");
|
754
765
|
|
755
|
-
rb_define_module_function(mByebug, "add_catchpoint"
|
756
|
-
rb_define_module_function(mByebug, "breakpoints"
|
757
|
-
rb_define_module_function(mByebug, "catchpoints"
|
758
|
-
rb_define_module_function(mByebug, "contexts"
|
759
|
-
rb_define_module_function(mByebug, "current_context", bb_current_context, 0);
|
760
|
-
rb_define_module_function(mByebug, "debug_load"
|
761
|
-
rb_define_module_function(mByebug, "post_mortem?"
|
762
|
-
rb_define_module_function(mByebug, "post_mortem="
|
763
|
-
rb_define_module_function(mByebug, "
|
764
|
-
rb_define_module_function(mByebug, "
|
765
|
-
rb_define_module_function(mByebug, "
|
766
|
-
rb_define_module_function(mByebug, "
|
767
|
-
rb_define_module_function(mByebug, "
|
768
|
-
rb_define_module_function(mByebug, "tracing
|
769
|
-
rb_define_module_function(mByebug, "
|
770
|
-
rb_define_module_function(mByebug, "verbose
|
766
|
+
rb_define_module_function(mByebug, "add_catchpoint" , bb_add_catchpoint , 1);
|
767
|
+
rb_define_module_function(mByebug, "breakpoints" , bb_breakpoints , 0);
|
768
|
+
rb_define_module_function(mByebug, "catchpoints" , bb_catchpoints , 0);
|
769
|
+
rb_define_module_function(mByebug, "contexts" , bb_contexts , 0);
|
770
|
+
rb_define_module_function(mByebug, "current_context" , bb_current_context , 0);
|
771
|
+
rb_define_module_function(mByebug, "debug_load" , bb_load , -1);
|
772
|
+
rb_define_module_function(mByebug, "post_mortem?" , bb_post_mortem , 0);
|
773
|
+
rb_define_module_function(mByebug, "post_mortem=" , bb_set_post_mortem , 1);
|
774
|
+
rb_define_module_function(mByebug, "raised_exception" , bb_raised_exception, 0);
|
775
|
+
rb_define_module_function(mByebug, "_start" , bb_start , 0);
|
776
|
+
rb_define_module_function(mByebug, "started?" , bb_started , 0);
|
777
|
+
rb_define_module_function(mByebug, "stop" , bb_stop , 0);
|
778
|
+
rb_define_module_function(mByebug, "thread_context" , bb_thread_context , 1);
|
779
|
+
rb_define_module_function(mByebug, "tracing?" , bb_tracing , 0);
|
780
|
+
rb_define_module_function(mByebug, "tracing=" , bb_set_tracing , 1);
|
781
|
+
rb_define_module_function(mByebug, "verbose" , bb_verbose , 0);
|
782
|
+
rb_define_module_function(mByebug, "verbose=" , bb_set_verbose , 1);
|
771
783
|
|
772
784
|
cThreadsTable = rb_define_class_under(mByebug, "ThreadsTable", rb_cObject);
|
773
785
|
|
@@ -777,5 +789,6 @@ Init_byebug()
|
|
777
789
|
rb_global_variable(&breakpoints);
|
778
790
|
rb_global_variable(&catchpoints);
|
779
791
|
rb_global_variable(&tracepoints);
|
792
|
+
rb_global_variable(&raised_exception);
|
780
793
|
rb_global_variable(&threads);
|
781
794
|
}
|
data/ext/byebug/byebug.h
CHANGED
@@ -5,14 +5,14 @@
|
|
5
5
|
#include <ruby/debug.h>
|
6
6
|
|
7
7
|
/* flags */
|
8
|
-
#define
|
9
|
-
#define
|
10
|
-
#define
|
11
|
-
#define
|
12
|
-
#define
|
13
|
-
#define
|
14
|
-
#define
|
15
|
-
#define
|
8
|
+
#define CTX_FL_DEAD (1<<1) /* this context belonged to a dead thread */
|
9
|
+
#define CTX_FL_ENABLE_BKPT (1<<2) /* can check for breakpoints */
|
10
|
+
#define CTX_FL_FORCE_MOVE (1<<3) /* don't stop unless we've changed line */
|
11
|
+
#define CTX_FL_IGNORE (1<<4) /* this context belongs to ignored thread */
|
12
|
+
#define CTX_FL_SUSPEND (1<<5) /* thread currently suspended */
|
13
|
+
#define CTX_FL_TRACING (1<<6) /* call at_tracing method */
|
14
|
+
#define CTX_FL_WAS_RUNNING (1<<7) /* thread was previously running */
|
15
|
+
#define CTX_FL_STOP_ON_RET (1<<8) /* can stop on method 'end' */
|
16
16
|
|
17
17
|
/* macro functions */
|
18
18
|
#define CTX_FL_TEST(c,f) ((c)->flags & (f))
|
@@ -35,11 +35,10 @@ typedef struct {
|
|
35
35
|
VALUE thread;
|
36
36
|
int thnum;
|
37
37
|
|
38
|
-
int dest_frame;
|
39
|
-
int lines; /* # of lines in dest_frame before stopping
|
40
|
-
int steps; /* # of steps before stopping
|
41
|
-
int
|
42
|
-
int before_frame; /* stop right before returning from this frame */
|
38
|
+
int dest_frame; /* next stop's frame if stopped by next */
|
39
|
+
int lines; /* # of lines in dest_frame before stopping */
|
40
|
+
int steps; /* # of steps before stopping */
|
41
|
+
int steps_out; /* # of returns before stopping */
|
43
42
|
|
44
43
|
VALUE last_file;
|
45
44
|
VALUE last_line;
|