Module: Byebug
- Defined in:
- ext/byebug/byebug.c
Defined Under Namespace
Classes: DebugThread, ThreadsTable
Class Method Summary collapse
-
.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.
-
.lock ⇒ Thread.current
Locks global switch to reserve execution to current thread exclusively.
-
.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.
-
.start ⇒ Boolean
The return value is the value of !Byebug.started? before issuing the
start
; That is,true
is returned, unless byebug was previously started. -
.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. -
.unlock ⇒ nil
Unlocks global switch so other threads can run.
Class Method Details
.add_catchpoint(exception) ⇒ Exception
Adds a new exception to the catchpoints array.
716 717 718 719 720 721 722 723 724 725 726 |
# File 'ext/byebug/byebug.c', line 716
static VALUE
Add_catchpoint(VALUE self, VALUE value)
{
UNUSED(self);
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.
26 27 28 29 30 31 32 33 34 35 |
# File 'ext/byebug/byebug.c', line 26
static VALUE
Breakpoints(VALUE self)
{
UNUSED(self);
if (NIL_P(breakpoints))
breakpoints = rb_ary_new();
return breakpoints;
}
|
.catchpoints ⇒ Array
Returns an array of catchpoints.
43 44 45 46 47 48 49 |
# File 'ext/byebug/byebug.c', line 43
static VALUE
Catchpoints(VALUE self)
{
UNUSED(self);
return catchpoints;
}
|
.contexts ⇒ Array
Returns an array of all contexts.
471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 |
# File 'ext/byebug/byebug.c', line 471
static VALUE
Contexts(VALUE self)
{
volatile VALUE list;
volatile VALUE new_list;
VALUE context;
threads_table_t *t_tbl;
debug_context_t *dc;
int i;
UNUSED(self);
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);
}
Data_Get_Struct(threads, threads_table_t, t_tbl);
st_clear(t_tbl->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
536 537 538 539 540 541 542 543 544 545 546 547 548 |
# File 'ext/byebug/byebug.c', line 536
static VALUE
Current_context(VALUE self)
{
VALUE context;
UNUSED(self);
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
619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 |
# File 'ext/byebug/byebug.c', line 619
static VALUE
Debug_load(int argc, VALUE * argv, VALUE self)
{
VALUE file, stop, context;
debug_context_t *dc;
VALUE status = Qnil;
int state = 0;
UNUSED(self);
if (rb_scan_args(argc, argv, "11", &file, &stop) == 1)
stop = Qfalse;
Start(self);
context = Current_context(self);
Data_Get_Struct(context, debug_context_t, dc);
dc->calced_stack_size = 1;
if (RTEST(stop))
dc->steps = 1;
rb_load_protect(file, 0, &state);
if (0 != state)
{
status = rb_errinfo();
reset_stepping_stop_points(dc);
}
return status;
}
|
.lock ⇒ Thread.current
Locks global switch to reserve execution to current thread exclusively.
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'ext/byebug/threads.c', line 198
static VALUE
Lock(VALUE self)
{
debug_context_t *dc;
VALUE context;
UNUSED(self);
if (!is_living_thread(rb_thread_current()))
rb_raise(rb_eRuntimeError, "Current thread is dead!");
thread_context_lookup(rb_thread_current(), &context);
Data_Get_Struct(context, debug_context_t, dc);
acquire_lock(dc);
return locker;
}
|
.post_mortem=(bool) ⇒ Object
Sets post-moterm flag.
701 702 703 704 705 706 707 708 |
# File 'ext/byebug/byebug.c', line 701
static VALUE
Set_post_mortem(VALUE self, VALUE value)
{
UNUSED(self);
post_mortem = RTEST(value) ? Qtrue : Qfalse;
return value;
}
|
.post_mortem? ⇒ Boolean
Returns true
if post-mortem debugging is enabled.
687 688 689 690 691 692 693 |
# File 'ext/byebug/byebug.c', line 687
static VALUE
Post_mortem(VALUE self)
{
UNUSED(self);
return post_mortem;
}
|
.raised_exception ⇒ Exception
Returns raised exception when in post_mortem mode.
57 58 59 60 61 62 63 |
# File 'ext/byebug/byebug.c', line 57
static VALUE
Raised_exception(VALUE self)
{
UNUSED(self);
return raised_exception;
}
|
.start ⇒ Boolean
The return value is the value of !Byebug.started? before issuing the start
; That is, true
is returned, unless byebug was previously started.
597 598 599 600 601 602 603 604 605 606 607 608 609 610 |
# File 'ext/byebug/byebug.c', line 597
static VALUE
Start(VALUE self)
{
if (IS_STARTED)
return Qfalse;
catchpoints = rb_hash_new();
threads = create_threads_table();
register_tracepoints(self);
return Qtrue;
}
|
.started? ⇒ Boolean
Returns true
byebug is started.
556 557 558 559 560 561 562 |
# File 'ext/byebug/byebug.c', line 556
static VALUE
Started(VALUE self)
{
UNUSED(self);
return IS_STARTED;
}
|
.stop ⇒ Boolean
This method disables byebug. It returns true
if byebug was already disabled, otherwise it returns false
.
571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 |
# File 'ext/byebug/byebug.c', line 571
static VALUE
Stop(VALUE self)
{
UNUSED(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.
515 516 517 518 519 520 521 522 523 524 525 526 527 |
# File 'ext/byebug/byebug.c', line 515
static VALUE
Thread_context(VALUE self, VALUE thread)
{
VALUE context;
UNUSED(self);
check_started();
thread_context_lookup(thread, &context);
return context;
}
|
.tracing=(bool) ⇒ Object
Sets the global tracing flag.
672 673 674 675 676 677 678 679 |
# File 'ext/byebug/byebug.c', line 672
static VALUE
Set_tracing(VALUE self, VALUE value)
{
UNUSED(self);
tracing = RTEST(value) ? Qtrue : Qfalse;
return value;
}
|
.tracing? ⇒ Boolean
Returns true
if global tracing is enabled.
658 659 660 661 662 663 664 |
# File 'ext/byebug/byebug.c', line 658
static VALUE
Tracing(VALUE self)
{
UNUSED(self);
return tracing;
}
|
.unlock ⇒ nil
Unlocks global switch so other threads can run.
182 183 184 185 186 187 188 189 190 |
# File 'ext/byebug/threads.c', line 182
static VALUE
Unlock(VALUE self)
{
UNUSED(self);
release_lock();
return locker;
}
|