diff options
author | Aaron Patterson <[email protected]> | 2019-08-06 12:23:30 -0700 |
---|---|---|
committer | Aaron Patterson <[email protected]> | 2019-08-07 10:36:17 -0700 |
commit | 70fd099220446e39bb80eb0bb32870ce12134619 (patch) | |
tree | 3479b6b79e91926b3809356160a136415b06adb6 | |
parent | 2f3795113df23006f1f99dd5879a8a9acbc29c5c (diff) |
Add a way to print debug counters without exiting
I am trying to study debug counters inside a Rails application.
Accessing debug counters by killing the process is hard because child
processes don't get the same TRAP as the parent, and Rails seems to
intercept calls to `exit`. Adding this method lets me print the debug
counters when I want (at the end of requests for example)
-rw-r--r-- | debug_counter.c | 7 | ||||
-rw-r--r-- | debug_counter.h | 1 | ||||
-rw-r--r-- | vm.c | 1 |
3 files changed, 9 insertions, 0 deletions
diff --git a/debug_counter.c b/debug_counter.c index f17fb1c488..f17b3b4d7c 100644 --- a/debug_counter.c +++ b/debug_counter.c @@ -44,6 +44,13 @@ rb_debug_counter_show_results(const char *msg) } VALUE +rb_debug_counter_show(void) +{ + rb_debug_counter_show_results("method call"); + return Qnil; +} + +VALUE rb_debug_counter_reset(void) { for (int i = 0; i < RB_DEBUG_COUNTER_MAX; i++) { diff --git a/debug_counter.h b/debug_counter.h index ef35c55e6e..3fa644828d 100644 --- a/debug_counter.h +++ b/debug_counter.h @@ -350,6 +350,7 @@ rb_debug_counter_add(enum rb_debug_counter_type type, int add, int cond) } VALUE rb_debug_counter_reset(void); +VALUE rb_debug_counter_show(void); #define RB_DEBUG_COUNTER_INC(type) rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, 1) #define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (!rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, !(cond))) @@ -2916,6 +2916,7 @@ Init_VM(void) rb_define_singleton_method(rb_cRubyVM, "stat", vm_stat, -1); #if USE_DEBUG_COUNTER rb_define_singleton_method(rb_cRubyVM, "reset_debug_counters", rb_debug_counter_reset, 0); + rb_define_singleton_method(rb_cRubyVM, "show_debug_counters", rb_debug_counter_show, 0); #endif /* FrozenCore (hidden) */ |