1# From http://cpansearch.perl.org/src/GOZER/mod_perl-1.31/.gdbinit
2
3#some handy debugging macros, hopefully you'll never need them
4#some don't quite work, like dump_hv and hv_fetch,
5#where's the bloody manpage for .gdbinit syntax?
6
7define thttpd
8   run -X -f `pwd`/t/conf/httpd.conf -d `pwd`/t
9#   set $sv = perl_eval_pv("$Apache::ErrLog = '/tmp/mod_perl_error_log'",1)
10end
11
12define httpd
13   run -X -d `pwd`
14   set $sv = perl_eval_pv("$Apache::ErrLog = Apache->server_root_relative('logs/error_log')", 1)
15   #printf "error_log = %s\n", ((XPV*) ($sv)->sv_any )->xpv_pv
16end
17
18define STpvx
19   print ((XPV*) (PL_stack_base [ax + ($arg0)] )->sv_any )->xpv_pv
20end
21
22define TOPs
23    print ((XPV*) (**sp)->sv_any )->xpv_pv
24end
25
26define curstash
27   print ((XPVHV*) (PL_curstash)->sv_any)->xhv_name
28end
29
30define defstash
31   print ((XPVHV*) (PL_defstash)->sv_any)->xhv_name
32end
33
34define curinfo
35   printf "%d:%s\n", PL_curcop->cop_line, \
36   ((XPV*)(*(XPVGV*)PL_curcop->cop_filegv->sv_any)\
37   ->xgv_gp->gp_sv->sv_any)->xpv_pv
38end
39
40define SvPVX
41print ((XPV*) ($arg0)->sv_any )->xpv_pv
42end
43
44define SvCUR
45   print ((XPV*)  ($arg0)->sv_any )->xpv_cur
46end
47
48define SvLEN
49   print ((XPV*)  ($arg0)->sv_any )->xpv_len
50end
51
52define SvEND
53   print (((XPV*)  ($arg0)->sv_any )->xpv_pv + ((XPV*)($arg0)->sv_any )->xpv_cur) - 1
54end
55
56define SvSTASH
57   print ((XPVHV*)((XPVMG*)($arg0)->sv_any )->xmg_stash)->sv_any->xhv_name
58end
59
60define SvTAINTED
61   print ((($arg0)->sv_flags  & (0x00002000 |0x00004000 |0x00008000 ))  && Perl_sv_tainted ($arg0))
62end
63
64define SvTRUE
65   print (	!$arg0	? 0	:    (($arg0)->sv_flags  & 0x00040000 ) 	?   ((PL_Xpv  = (XPV*)($arg0)->sv_any ) &&	(*PL_Xpv ->xpv_pv > '0' ||	PL_Xpv ->xpv_cur > 1 ||	(PL_Xpv ->xpv_cur && *PL_Xpv ->xpv_pv != '0'))	? 1	: 0)	:	(($arg0)->sv_flags  & 0x00010000 ) 	? ((XPVIV*)  ($arg0)->sv_any )->xiv_iv  != 0	:   (($arg0)->sv_flags  & 0x00020000 ) 	? ((XPVNV*)($arg0)->sv_any )->xnv_nv  != 0.0	: Perl_sv_2bool ($arg0) )
66end
67
68define GvHV
69   set $hv = (((((XPVGV*)($arg0)->sv_any ) ->xgv_gp) )->gp_hv)
70end
71
72define GvSV
73 print ((XPV*) ((((XPVGV*)($arg0)->sv_any ) ->xgv_gp) ->gp_sv )->sv_any )->xpv_pv
74end
75
76define GvNAME
77   print (((XPVGV*)($arg0)->sv_any ) ->xgv_name)
78end
79
80define GvFILEGV
81   print ((XPV*) ((((XPVGV*)$arg0->filegv)->xgv_gp)->gp_sv)->sv_any)->xpv_pv
82end
83
84define CvNAME
85   print ((XPVGV*)(((XPVCV*)($arg0)->sv_any)->xcv_gv)->sv_any)->xgv_name
86end
87
88define CvSTASH
89   print ((XPVHV*)(((XPVGV*)(((XPVCV*)($arg0)->sv_any)->xcv_gv)->sv_any)->xgv_stash)->sv_any)->xhv_name
90end
91
92define CvDEPTH
93   print ((XPVCV*)($arg0)->sv_any )->xcv_depth
94end
95
96define CvFILEGV
97   print ((XPV*) ((((XPVGV*)((XPVCV*)($arg0)->sv_any )->xcv_filegv)->xgv_gp)->gp_sv)->sv_any)->xpv_pv
98end
99
100define SVOPpvx
101   print ((XPV*) ( ((SVOP*)$arg0)->op_sv)->sv_any )->xpv_pv
102end
103
104define HvNAME
105   print ((XPVHV*)$arg0->sv_any)->xhv_name
106end
107
108define HvKEYS
109   print ((XPVHV*)  ($arg0)->sv_any)->xhv_keys
110end
111
112define AvFILL
113   print ((XPVAV*)  ($arg0)->sv_any)->xav_fill
114end
115
116define dumpav
117    set $n = ((XPVAV*)  ($arg0)->sv_any)->xav_fill
118    set $i = 0
119    while $i <= $n
120        set $sv = *Perl_av_fetch($arg0, $i, 0)
121        printf "[%u] -> `%s'\n", $i, ((XPV*) ($sv)->sv_any )->xpv_pv
122        set $i = $i + 1
123    end
124end
125
126define dumphv
127    set $n = ((XPVHV*)  ($arg0)->sv_any)->xhv_keys
128    set $i = 0
129    set $key = 0
130    set $klen = 0
131    Perl_hv_iterinit($arg0)
132    while $i <= $n
133        set $sv = Perl_hv_iternextsv($arg0, &$key, &$klen)
134        printf "%s = `%s'\n", $key, ((XPV*) ($sv)->sv_any )->xpv_pv
135        set $i = $i + 1
136    end
137end
138
139define hvfetch
140   set $klen = strlen($arg1)
141   set $sv = *Perl_hv_fetch($arg0, $arg1, $klen, 0)
142   printf "%s = `%s'\n", $arg1, ((XPV*) ($sv)->sv_any )->xpv_pv
143end
144
145define hvINCval
146   set $hv = (((((XPVGV*)(PL_incgv)->sv_any)->xgv_gp))->gp_hv)
147   set $klen = strlen($arg0)
148   set $sv = *Perl_hv_fetch($hv, $arg0, $klen, 0)
149   printf "%s = `%s'\n", $arg0, ((XPV*) ($sv)->sv_any )->xpv_pv
150end
151
152define dumpany
153   set $sv = Perl_newSVpv("use Data::Dumper; Dumper \\",0)
154   set $void = Perl_sv_catpv($sv, $arg0)
155   set $dump = perl_eval_pv(((XPV*) ($sv)->sv_any )->xpv_pv, 1)
156   printf "%s = `%s'\n", $arg0, ((XPV*) ($dump)->sv_any )->xpv_pv
157end
158
159define dumpanyrv
160   set $rv = Perl_newRV((SV*)$arg0)
161   set $rvpv = perl_get_sv("main::DumpAnyRv", 1)
162   set $void = Perl_sv_setsv($rvpv, $rv)
163   set $sv = perl_eval_pv("use Data::Dumper; Dumper $::DumpAnyRv",1)
164   printf "`%s'\n", ((XPV*) ($sv)->sv_any )->xpv_pv
165end
166
167define svpeek
168   set $pv = Perl_sv_peek((SV*)$arg0)
169   printf "%s\n", $pv
170end
171
172define caller
173   set $sv = perl_eval_pv("scalar caller", 1)
174   printf "caller = %s\n", ((XPV*) ($sv)->sv_any )->xpv_pv
175end
176
177define cluck
178   set $sv = perl_eval_pv("Carp::cluck(); `tail '$Apache::ErrLog'`", 1)
179   printf "%s\n", ((XPV*) ($sv)->sv_any )->xpv_pv
180end
181
182define longmess
183   set $sv = perl_eval_pv("Carp::longmess()", 1)
184   printf "%s\n", ((XPV*) ($sv)->sv_any )->xpv_pv
185end
186
187define shortmess
188   set $sv = perl_eval_pv("Carp::shortmess()", 1)
189   printf "%s\n", ((XPV*) ($sv)->sv_any )->xpv_pv
190end
191
192define perl_get_sv
193    set $sv = perl_get_sv($arg0, 0)
194    printf "%s\n", $sv ? ((XPV*) ((SV*)$sv)->sv_any)->xpv_pv : "undef"
195end
196