From 6aecb4d8875ad61f4fda2e73c30d268ef7e54d52 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 19 Oct 2009 02:34:40 +0000 Subject: * .gdbinit (rb_ps): dump all threads and their callstacks. based on [ruby-core:26155] by Joshua ben Jore . git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- .gdbinit | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to '.gdbinit') diff --git a/.gdbinit b/.gdbinit index a542b71ba..f486d36de 100644 --- a/.gdbinit +++ b/.gdbinit @@ -652,3 +652,41 @@ define iseq print *(ADJUST*)($arg0) end end + +define rb_ps + rb_ps_vm ruby_current_vm +end +document rb_ps +Dump all threads and their callstacks +end + +define rb_ps_vm + print $ps_vm = (rb_vm_t*)$arg0 + set $ps_threads = (st_table*)$ps_vm->living_threads + if $ps_threads->entries_packed + set $ps_threads_i = 0 + while $ps_threads_i < $ps_threads->num_entries + set $ps_threads_key = (st_data_t)$ps_threads->bins[$ps_threads_i * 2] + set $ps_threads_val = (st_data_t)$ps_threads->bins[$ps_threads_i * 2 + 1] + rb_ps_thread $ps_threads_key $ps_threads_val + set $ps_threads_i = $ps_threads_i + 1 + end + else + set $ps_threads_ptr = (st_table_entry*)$ps_threads->head + while $ps_threads_ptr + set $ps_threads_key = (st_data_t)$ps_threads_ptr->key + set $ps_threads_val = (st_data_t)$ps_threads_ptr->record + rb_ps_thread $ps_threads_key $ps_threads_val + set $ps_threads_ptr = (st_table_entry*)$ps_threads_ptr->fore + end + end +end +document rb_ps_vm +Dump all threads in a (rb_vm_t*) and their callstacks +end + +define rb_ps_thread + set $ps_thread = (struct RTypedData*)$arg0 + set $ps_thread_id = $arg1 + print $ps_thread_th = (rb_thread_t*)$ps_thread->data +end -- cgit