Module: Byebug

Defined in:
ext/byebug/byebug.c

Defined Under Namespace

Classes: DebugThread, ThreadsTable

Class Method Summary collapse

Class Method Details

.add_catchpoint(exception) ⇒ Exception

Adds a new exception to the catchpoints array.

Returns:


758
759
760
761
762
763
764
765
766
767
768
# File 'ext/byebug/byebug.c', line 758

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;
}

.breakpointsArray

Returns an array of breakpoints.

Returns:

  • (Array)

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;
}

.catchpointsArray

Returns an array of catchpoints.

Returns:

  • (Array)

43
44
45
46
47
48
49
# File 'ext/byebug/byebug.c', line 43

static VALUE
Catchpoints(VALUE self)
{
  UNUSED(self);

  return catchpoints;
}

.contextsArray

Returns an array of all contexts.

Returns:

  • (Array)

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
508
509
510
511
512
513
# File 'ext/byebug/byebug.c', line 477

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_contextObject

Returns the current context.

<i>Note:</i> Byebug.current_context.thread == Thread.current

542
543
544
545
546
547
548
549
550
551
552
553
554
# File 'ext/byebug/byebug.c', line 542

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

Returns:

  • (nil)

631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
# File 'ext/byebug/byebug.c', line 631

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;
}

.lockThread.current

Locks global switch to reserve execution to current thread exclusively.

Returns:

  • (Thread.current)

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.


743
744
745
746
747
748
749
750
# File 'ext/byebug/byebug.c', line 743

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.

Returns:

  • (Boolean)

Returns:

  • (Boolean)

729
730
731
732
733
734
735
# File 'ext/byebug/byebug.c', line 729

static VALUE
Post_mortem(VALUE self)
{
  UNUSED(self);

  return post_mortem;
}

.raised_exceptionException

Returns raised exception when in post_mortem mode.

Returns:


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;
}

.startBoolean

The return value is the value of !Byebug.started? before issuing the start; That is, true is returned, unless byebug was previously started.

Returns:

  • (Boolean)

603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
# File 'ext/byebug/byebug.c', line 603

static VALUE
Start(VALUE self)
{
  VALUE result;

  UNUSED(self);

  if (IS_STARTED)
    result = Qfalse;
  else
  {
    catchpoints = rb_hash_new();
    threads = create_threads_table();

    register_tracepoints(self);
    result = Qtrue;
  }

  return result;
}

.started?Boolean

Returns true byebug is started.

Returns:

  • (Boolean)

Returns:

  • (Boolean)

562
563
564
565
566
567
568
# File 'ext/byebug/byebug.c', line 562

static VALUE
Started(VALUE self)
{
  UNUSED(self);

  return IS_STARTED;
}

.stopBoolean

This method disables byebug. It returns true if byebug was already disabled, otherwise it returns false.

Returns:

  • (Boolean)

577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
# File 'ext/byebug/byebug.c', line 577

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.


521
522
523
524
525
526
527
528
529
530
531
532
533
# File 'ext/byebug/byebug.c', line 521

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.


714
715
716
717
718
719
720
721
# File 'ext/byebug/byebug.c', line 714

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.

Returns:

  • (Boolean)

Returns:

  • (Boolean)

700
701
702
703
704
705
706
# File 'ext/byebug/byebug.c', line 700

static VALUE
Tracing(VALUE self)
{
  UNUSED(self);

  return tracing;
}

.unlocknil

Unlocks global switch so other threads can run.

Returns:

  • (nil)

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;
}

.verbose=(bool) ⇒ Object

Enable verbose output of every TracePoint API events, useful for debugging byebug.


685
686
687
688
689
690
691
692
# File 'ext/byebug/byebug.c', line 685

static VALUE
Set_verbose(VALUE self, VALUE value)
{
  UNUSED(self);

  verbose = RTEST(value) ? Qtrue : Qfalse;
  return value;
}

.verbose?Boolean

Returns true if verbose output of TracePoint API events is enabled.

Returns:

  • (Boolean)

Returns:

  • (Boolean)

670
671
672
673
674
675
676
# File 'ext/byebug/byebug.c', line 670

static VALUE
Verbose(VALUE self)
{
  UNUSED(self);

  return verbose;
}