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