Module: Byebug
- Defined in:
- ext/byebug/byebug.c
Defined Under Namespace
Classes: Breakpoint, DebugThread, ThreadsTable
Class Method Summary collapse
-
._start ⇒ Object
This method is internal and activates the debugger.
-
.add_catchpoint(exception) ⇒ Exception
Adds a new exception to the catchpoints array.
-
.breakpoints ⇒ Array
Returns an array of breakpoints.
-
.catchpoints ⇒ Array
Returns an array of catchpoints.
-
.contexts ⇒ Array
Returns an array of all contexts.
-
.current_context ⇒ Object
Returns the current context.
-
.debug_load(file, stop = false) ⇒ nil
Same as Kernel#load but resets current context’s frames.
-
.post_mortem=(bool) ⇒ Object
Sets post-moterm flag.
-
.post_mortem? ⇒ Boolean
Returns
true
if post-mortem debugging is enabled. -
.raised_exception ⇒ Exception
Returns raised exception when in post_mortem mode.
-
.started? ⇒ Boolean
Returns
true
byebug is started. -
.stop ⇒ Boolean
This method disables byebug.
-
.thread_context(thread) ⇒ Object
Returns context of the thread passed as an argument.
-
.tracing=(bool) ⇒ Object
Sets the global tracing flag.
-
.tracing ⇒ Boolean
Returns
true
if global tracing is enabled. -
.verbose ⇒ Boolean
Returns
true
if verbose output of TracePoint API events is enabled. -
.verbose=(bool) ⇒ Object
Enable verbose output of every TracePoint API events, useful for debugging byebug.
Class Method Details
.start_ ⇒ Boolean .start_ { ... } ⇒ Boolean
This method is internal and activates the debugger. Use Byebug.start (from lib/byebug.rb
) instead.
The return value is the value of !Byebug.started? before issuing the start
; That is, true
is returned, unless byebug was previously started.
If a block is given, it starts byebug and yields to block. When the block is finished executing it stops the debugger with Byebug.stop method.
558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 |
# File 'ext/byebug/byebug.c', line 558
static VALUE
bb_start(VALUE self)
{
VALUE result;
if (IS_STARTED)
result = Qfalse;
else
{
locker = Qnil;
breakpoints = rb_ary_new();
catchpoints = rb_hash_new();
threads = threads_create();
register_tracepoints(self);
result = Qtrue;
}
if (rb_block_given_p())
rb_ensure(rb_yield, self, bb_stop, self);
return result;
}
|
.add_catchpoint(exception) ⇒ Exception
Adds a new exception to the catchpoints array.
731 732 733 734 735 736 737 738 739 |
# File 'ext/byebug/byebug.c', line 731
static VALUE
bb_add_catchpoint(VALUE self, VALUE value)
{
if (TYPE(value) != T_STRING)
rb_raise(rb_eTypeError, "value of a catchpoint must be String");
rb_hash_aset(catchpoints, rb_str_dup(value), INT2FIX(0));
return value;
}
|
.breakpoints ⇒ Array
Returns an array of breakpoints.
707 708 709 710 711 |
# File 'ext/byebug/byebug.c', line 707
static VALUE
bb_breakpoints(VALUE self)
{
return breakpoints;
}
|
.catchpoints ⇒ Array
Returns an array of catchpoints.
719 720 721 722 723 |
# File 'ext/byebug/byebug.c', line 719
static VALUE
bb_catchpoints(VALUE self)
{
return catchpoints;
}
|
.contexts ⇒ Array
Returns an array of all contexts.
437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 |
# File 'ext/byebug/byebug.c', line 437
static VALUE
bb_contexts(VALUE self)
{
volatile VALUE list;
volatile VALUE new_list;
VALUE context;
threads_table_t *t_tbl;
debug_context_t *dc;
int i;
check_started();
new_list = rb_ary_new();
list = rb_funcall(rb_cThread, rb_intern("list"), 0);
for (i = 0; i < RARRAY_LENINT(list); i++)
{
VALUE thread = rb_ary_entry(list, i);
thread_context_lookup(thread, &context);
rb_ary_push(new_list, context);
}
threads_clear(threads);
Data_Get_Struct(threads, threads_table_t, t_tbl);
for (i = 0; i < RARRAY_LENINT(new_list); i++)
{
context = rb_ary_entry(new_list, i);
Data_Get_Struct(context, debug_context_t, dc);
st_insert(t_tbl->tbl, dc->thread, context);
}
return new_list;
}
|
.current_context ⇒ Object
Returns the current context.
<i>Note:</i> Byebug.current_context.thread == Thread.current
497 498 499 500 501 502 503 504 505 506 507 |
# File 'ext/byebug/byebug.c', line 497
static VALUE
bb_current_context(VALUE self)
{
VALUE context;
check_started();
thread_context_lookup(rb_thread_current(), &context);
return context;
}
|
.debug_load(file, stop = false) ⇒ nil
Same as Kernel#load but resets current context’s frames. stop
parameter forces byebug to stop at the first line of code in file
589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 |
# File 'ext/byebug/byebug.c', line 589
static VALUE
bb_load(int argc, VALUE *argv, VALUE self)
{
VALUE file, stop, context;
debug_context_t *dc;
VALUE status = Qnil;
int state = 0;
if (rb_scan_args(argc, argv, "11", &file, &stop) == 1)
{
stop = Qfalse;
}
bb_start(self);
context = bb_current_context(self);
Data_Get_Struct(context, debug_context_t, dc);
if (RTEST(stop)) dc->steps = 1;
/* Initializing $0 to the script's path */
ruby_script(RSTRING_PTR(file));
rb_load_protect(file, 0, &state);
if (0 != state)
{
status = rb_errinfo();
reset_stepping_stop_points(dc);
}
/* We should run all at_exit handler's in order to provide, for instance, a
* chance to run all defined test cases */
rb_exec_end_proc();
return status;
}
|
.post_mortem=(bool) ⇒ Object
Sets post-moterm flag.
694 695 696 697 698 699 |
# File 'ext/byebug/byebug.c', line 694
static VALUE
bb_set_post_mortem(VALUE self, VALUE value)
{
post_mortem = RTEST(value) ? Qtrue : Qfalse;
return value;
}
|
.post_mortem? ⇒ Boolean
Returns true
if post-mortem debugging is enabled.
682 683 684 685 686 |
# File 'ext/byebug/byebug.c', line 682
static VALUE
bb_post_mortem(VALUE self)
{
return post_mortem;
}
|
.raised_exception ⇒ Exception
Returns raised exception when in post_mortem mode.
747 748 749 750 751 |
# File 'ext/byebug/byebug.c', line 747
static VALUE
bb_raised_exception(VALUE self)
{
return raised_exception;
}
|
.started? ⇒ Boolean
Returns true
byebug is started.
515 516 517 518 519 |
# File 'ext/byebug/byebug.c', line 515
static VALUE
bb_started(VALUE self)
{
return IS_STARTED;
}
|
.stop ⇒ Boolean
This method disables byebug. It returns true
if byebug was already disabled, otherwise it returns false
.
528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 |
# File 'ext/byebug/byebug.c', line 528
static VALUE
bb_stop(VALUE self)
{
if (IS_STARTED)
{
clear_tracepoints(self);
breakpoints = Qnil;
catchpoints = Qnil;
threads = Qnil;
return Qfalse;
}
return Qtrue;
}
|
.thread_context(thread) ⇒ Object
Returns context of the thread passed as an argument.
478 479 480 481 482 483 484 485 486 487 488 |
# File 'ext/byebug/byebug.c', line 478
static VALUE
bb_thread_context(VALUE self, VALUE thread)
{
VALUE context;
check_started();
thread_context_lookup(thread, &context);
return context;
}
|
.tracing=(bool) ⇒ Object
Sets the global tracing flag.
669 670 671 672 673 674 |
# File 'ext/byebug/byebug.c', line 669
static VALUE
bb_set_tracing(VALUE self, VALUE value)
{
tracing = RTEST(value) ? Qtrue : Qfalse;
return value;
}
|
.tracing ⇒ Boolean
Returns true
if global tracing is enabled.
657 658 659 660 661 |
# File 'ext/byebug/byebug.c', line 657
static VALUE
bb_tracing(VALUE self)
{
return tracing;
}
|
.verbose ⇒ Boolean
Returns true
if verbose output of TracePoint API events is enabled.
631 632 633 634 635 |
# File 'ext/byebug/byebug.c', line 631
static VALUE
bb_verbose(VALUE self)
{
return verbose;
}
|
.verbose=(bool) ⇒ Object
Enable verbose output of every TracePoint API events, useful for debugging byebug.
644 645 646 647 648 649 |
# File 'ext/byebug/byebug.c', line 644
static VALUE
bb_set_verbose(VALUE self, VALUE value)
{
verbose = RTEST(value) ? Qtrue : Qfalse;
return value;
}
|