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