byebug 2.7.0 → 3.0.0
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.
- 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;
|