diff options
author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:34:21 -0400 |
---|---|---|
committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:34:21 -0400 |
commit | 0e920280a2e04b110827bb766b9f29e3d581c4ee (patch) | |
tree | 8f2125f3d00fe3089e3b94adb06f04479ee15f2a /.gdbinit | |
download | php-0e920280a2e04b110827bb766b9f29e3d581c4ee.tar.gz |
Imported Upstream version 5.0.4upstream/5.0.4
Diffstat (limited to '.gdbinit')
-rw-r--r-- | .gdbinit | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/.gdbinit b/.gdbinit new file mode 100644 index 000000000..7c58e86fd --- /dev/null +++ b/.gdbinit @@ -0,0 +1,359 @@ +set $zts = 0 + +define ____executor_globals + if $zts + set $eg = ((zend_executor_globals) (*((void ***) tsrm_ls))[executor_globals_id-1]) + else + set $eg = executor_globals + end +end + +document ____executor_globals + portable way of accessing executor_globals + type "set $zts = 1" if you use --enable-maintainer-zts on your configure line +end + +define dump_bt + set $t = $arg0 + while $t + printf "[0x%08x] ", $t + if $t->function_state.function->common.function_name + printf "%s() ", $t->function_state.function->common.function_name + else + printf "??? " + end + if $t->op_array != 0 + printf "%s:%d ", $t->op_array->filename, $t->opline->lineno + end + set $t = $t->prev_execute_data + printf "\n" + end +end + +document dump_bt + dumps the current execution stack. usage: dump_bt executor_globals.current_execute_data +end + +define printzv + set $ind = 1 + ____printzv $arg0 0 +end + +document printzv + prints content of zval +end + +define ____printzv_contents + ____executor_globals + set $zvalue = $arg0 + + if $zvalue.type == 0 + set $typename = "NULL" + end + if $zvalue.type == 1 + set $typename = "long" + end + if $zvalue.type == 2 + set $typename = "double" + end + if $zvalue.type == 3 + set $typename = "string" + end + if $zvalue.type == 4 + set $typename = "array" + end + if $zvalue.type == 5 + set $typename = "object" + end + if $zvalue.type == 6 + set $typename = "bool" + end + if $zvalue.type == 7 + set $typename = "resource" + end + if $zvalue.type == 8 + set $typename = "constant" + end + if $zvalue.type == 9 + set $typename = "const_array" + end + + printf "(refcount=%d) %s: ", $zvalue.refcount, $typename + if $zvalue.type == 1 + printf "%ld", $zvalue.value.lval + end + if $zvalue->type == 2 + printf "%lf", $zvalue.value.dval + end + if $zvalue.type == 3 + printf "\"%s\"(%d)", $zvalue.value.str.val, $zvalue.value.str.len + end + if $zvalue.type == 4 + if ! $arg1 + printf "{\n" + set $ind = $ind + 1 + ____print_ht $zvalue.value.ht + set $ind = $ind - 1 + set $i = $ind + while $i > 0 + printf " " + set $i = $i - 1 + end + printf "}" + end + end + if $zvalue.type == 5 + if ! $arg1 + printf "(prop examination disabled due to a gdb bug)" + if $zvalue.value.obj.handlers->get_properties +# set $ht = $zvalue->value.obj.handlers->get_properties($zvalue) +# printf "{\n" +# set $ind = $ind + 1 +# ____print_ht $ht +# set $ind = $ind - 1 +# set $i = $ind +# while $i > 0 +# printf " " +# set $i = $i - 1 +# end +# printf "}" + end + end + end + if $zvalue.type == 6 + if $zvalue.value.lval + printf "true" + else + printf "false" + end + end + if $zvalue.type == 7 + printf "#%d", $zvalue.value.lval + end + printf "\n" +end + +define ____printzv + ____executor_globals + set $zvalue = $arg0 + + printf "[0x%08x] ", $zvalue + + if $zvalue == $eg.uninitialized_zval_ptr + printf "*uninitialized* " + end + + set $zcontents = *(struct _zval_struct *) $zvalue + if $arg1 + ____printzv_contents $zcontents $arg1 + else + ____printzv_contents $zcontents 0 + end +end + +define ____print_const_table + set $ht = $arg0 + set $p = $ht->pListHead + + while $p != 0 + set $const = *(zend_constant *) $p->pData + + set $i = $ind + while $i > 0 + printf " " + set $i = $i - 1 + end + + if $p->nKeyLength > 0 + printf "\"%s\" => ", $p->arKey + else + printf "%d => ", $p->h + end + + ____printzv_contents $const.value 0 + set $p = $p->pListNext + end +end + +define print_const_table + set $ind = 1 + printf "[0x%08x] {\n", $arg0 + ____print_const_table $arg0 + printf "}\n" +end + +define ____print_ht + set $ht = $arg0 + set $p = $ht->pListHead + + while $p != 0 + set $zval = *(struct _zval_struct **)$p->pData + + set $i = $ind + while $i > 0 + printf " " + set $i = $i - 1 + end + + if $p->nKeyLength > 0 + printf "\"%s\" => ", $p->arKey + else + printf "%d => ", $p->h + end + + ____printzv $zval 1 + set $p = $p->pListNext + end +end + +define print_ht + set $ind = 1 + printf "[0x%08x] {\n", $arg0 + ____print_ht $arg0 + printf "}\n" +end + +document print_ht + dumps elements of HashTable made of zval +end + +define printzn + ____executor_globals + set $ind = 0 + set $znode = $arg0 + if $znode->op_type == 1 + set $optype = "IS_CONST" + end + if $znode->op_type == 2 + set $optype = "IS_TMP_VAR" + end + if $znode->op_type == 4 + set $optype = "IS_VAR" + end + if $znode->op_type == 8 + set $optype = "IS_UNUSED" + end + + printf "[0x%08x] %s", $znode, $optype + + if $znode->op_type == 1 + printf ": " + ____printzv &$znode->u.constant 0 + end + if $znode->op_type == 2 + printf ": " + set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var) + ____printzv ((union _temp_variable *)$tvar)->tmp_var 0 + end + if $znode->op_type == 4 + printf ": " + set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var) + ____printzv *$tvar->var.ptr_ptr 0 + end + if $znode->op_type == 8 + printf "\n" + end +end + +document printzn + print type and content of znode. + usage: printzn &opline->op1 +end + +define printzops + printf "op1 => " + printzn &execute_data->opline.op1 + printf "op2 => " + printzn &execute_data->opline.op2 + printf "result => " + printzn &execute_data->opline.result +end + +document printzops + dump operands of the current opline +end + +define zbacktrace + ____executor_globals + dump_bt $eg.current_execute_data +end + +document zbacktrace + prints backtrace. + This command is almost a short cut for + > (gdb) ____executor_globals + > (gdb) dump_bt $eg.current_execute_data +end + +define zmemcheck + set $p = alloc_globals.head + set $stat = "?" + set $total_size = 0 + if $arg0 != 0 + set $not_found = 1 + else + set $not_found = 0 + end + printf " block size status file:line\n" + printf "-------------------------------------------------------------------------------\n" + while $p + set $aptr = $p + sizeof(struct _zend_mem_header) + sizeof(align_test) + if $arg0 == 0 || (void *)$aptr == (void *)$arg0 + if $p->magic == 0x7312f8dc + set $stat = "OK" + end + if $p->magic == 0x99954317 + set $stat = "FREED" + end + if $p->magic == 0xfb8277dc + set $stat = "CACHED" + end + set $filename = strrchr($p->filename, '/') + if !$filename + set $filename = $p->filename + else + set $filename = $filename + 1 + end + printf " 0x%08x ", $aptr + if $p->size == sizeof(struct _zval_struct) && ((struct _zval_struct *)$aptr)->type >= 0 && ((struct _zval_struct *)$aptr)->type < 10 + printf "ZVAL?(%-2d) ", $p->size + else + printf "%-9d ", $p->size + end + set $total_size = $total_size + $p->size + printf "%-06s %s:%d", $stat, $filename, $p->lineno + if $p->orig_filename + set $orig_filename = strrchr($p->orig_filename, '/') + if !$orig_filename + set $orig_filename = $p->orig_filename + else + set $orig_filename = $orig_filename + 1 + end + printf " <= %s:%d\n", $orig_filename, $p->orig_lineno + else + printf "\n" + end + if $arg0 != 0 + set $p = 0 + set $not_found = 0 + else + set $p = $p->pNext + end + else + set $p = $p->pNext + end + end + if $not_found + printf "no such block that begins at 0x%08x.\n", $aptr + end + if $arg0 == 0 + printf "-------------------------------------------------------------------------------\n" + printf " total: %d bytes\n", $total_size + end +end + +document zmemcheck + show status of a memory block. + usage: zmemcheck [ptr]. + if ptr is 0, all blocks will be listed. +end |