When debugging ruby on gdb, we often want to expand some preprocessor macros, such as RSTRING_LEN
, RARRAY_PTR
. To make preprocessor macros available to gdb, we should call gcc with these debugging options: -gdwarf-2 -g3
.
To configure ruby with these options, we do,
./configure debugflags="-gdwarf-2 -g3"
Then build ruby,
make
This allows us to expand preprocessor macros in gdb like this:
$ gdb --quiet /opt/ruby/trunk/bin/ruby Reading symbols for shared libraries .... done (gdb) b ruby_yyparse Breakpoint 1 at 0x20c49ba5cd1c8b: file parse.c, line 4583. (gdb) r Starting program: /opt/ruby/trunk/bin/ruby Reading symbols for shared libraries +++... done Reading symbols for shared libraries . done Breakpoint 1, ruby_yyparse (parser=0x10060c310) at parse.c:4583 4583 { (gdb) macro expand Qfalse expands to: ((VALUE)RUBY_Qfalse) (gdb) info macro RSTRING_PTR Defined at ../include/ruby/ruby.h:619 included at /Users/muraken/src/ruby.git/build-osx/parse.c:18 #define RSTRING_PTR(str) (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? RSTRING(str)->as.ary : RSTRING(str)->as.heap.ptr) (gdb)
Note that we must be in a frame where the target preprocessor macros are visible.
I thank hayeah and ujihisa for helpful discussion about this topic and proofreading my English.
See also: