File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / .gdbinit
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:47:51 2012 UTC (12 years, 4 months ago) by misho
Branches: php, MAIN
CVS tags: v5_3_10, HEAD
php

    1: define ____executor_globals
    2: 	if basic_functions_module.zts
    3: 		set $tsrm_ls = ts_resource_ex(0, 0)
    4: 		set $eg = ((zend_executor_globals) (*((void ***) $tsrm_ls))[executor_globals_id-1])
    5: 		set $cg = ((zend_compiler_globals) (*((void ***) $tsrm_ls))[compiler_globals_id-1])
    6: 	else
    7: 		set $eg = executor_globals
    8: 		set $cg = compiler_globals
    9: 	end
   10: end
   11: 
   12: document ____executor_globals
   13: 	portable way of accessing executor_globals, set $eg
   14: 	this also sets compiler_globals to $cg
   15: 	ZTS detection is automatically based on ext/standard module struct
   16: end
   17: 
   18: define print_cvs
   19: 	____executor_globals
   20: 	set $p = $eg.current_execute_data.CVs
   21: 	set $c = $eg.current_execute_data.op_array.last_var
   22: 	set $v = $eg.current_execute_data.op_array.vars
   23: 	set $i = 0
   24: 
   25: 	printf "Compiled variables count: %d\n", $c
   26: 	while $i < $c
   27: 		printf "%d = %s\n", $i, $v[$i].name
   28: 		if $p[$i] != 0
   29: 			printzv *$p[$i]
   30: 		else
   31: 			printf "*uninitialized*\n"
   32: 		end
   33: 		set $i = $i + 1
   34: 	end
   35: end
   36: 
   37: define dump_bt
   38: 	set $t = $arg0
   39: 	while $t
   40: 		printf "[0x%08x] ", $t
   41: 		if $t->function_state.function->common.function_name
   42: 			printf "%s() ", $t->function_state.function->common.function_name
   43: 		else
   44: 			printf "??? "
   45: 		end
   46: 		if $t->op_array != 0
   47: 			printf "%s:%d ", $t->op_array->filename, $t->opline->lineno
   48: 		end
   49: 		set $t = $t->prev_execute_data
   50: 		printf "\n"
   51: 	end
   52: end
   53: 
   54: document dump_bt
   55: 	dumps the current execution stack. usage: dump_bt executor_globals.current_execute_data
   56: end
   57: 
   58: define printzv
   59: 	set $ind = 1
   60: 	____printzv $arg0 0 
   61: end
   62: 
   63: document printzv
   64: 	prints zval contents
   65: end
   66: 
   67: define ____printzv_contents
   68: 	set $zvalue = $arg0
   69: 	set $type = $zvalue->type
   70: 
   71: 	printf "(refcount=%d", $zvalue->refcount__gc
   72: 	if $zvalue->is_ref__gc
   73: 		printf ",is_ref"
   74: 	end
   75: 	printf ") "
   76: 	if $type == 0
   77: 		printf "NULL"
   78: 	end
   79: 	if $type == 1
   80: 		printf "long: %ld", $zvalue->value.lval
   81: 	end
   82: 	if $type == 2
   83: 		printf "double: %lf", $zvalue->value.dval
   84: 	end
   85: 	if $type == 3
   86: 		printf "bool: "
   87: 		if $zvalue->value.lval
   88: 			printf "true"
   89: 		else
   90: 			printf "false"
   91: 		end
   92: 	end
   93: 	if $type == 4
   94: 		printf "array(%d): ", $zvalue->value.ht->nNumOfElements
   95: 		if ! $arg1
   96: 			printf "{\n"
   97: 			set $ind = $ind + 1
   98: 			____print_ht $zvalue->value.ht 1
   99: 			set $ind = $ind - 1
  100: 			set $i = $ind
  101: 			while $i > 0
  102: 				printf "  "
  103: 				set $i = $i - 1
  104: 			end
  105: 			printf "}"
  106: 		end
  107: 		set $type = 0
  108: 	end
  109: 	if $type == 5
  110: 		printf "object"
  111: 		____executor_globals
  112: 		set $handle = $zvalue->value.obj.handle
  113: 		set $handlers = $zvalue->value.obj.handlers
  114: 		if basic_functions_module.zts
  115: 			set $zobj = zend_objects_get_address($zvalue, $tsrm_ls)
  116: 		else
  117: 			set $zobj = zend_objects_get_address($zvalue)
  118: 		end
  119: 		if $handlers->get_class_entry == &zend_std_object_get_class
  120: 			set $cname = $zobj->ce.name
  121: 		else
  122: 			set $cname = "Unknown"
  123: 		end
  124: 		printf "(%s) #%d", $cname, $handle
  125: 		if ! $arg1
  126: 			if $handlers->get_properties == &zend_std_get_properties
  127: 				set $ht = $zobj->properties
  128: 				if $ht
  129: 					printf "(%d): ", $ht->nNumOfElements
  130: 					printf "{\n"
  131: 					set $ind = $ind + 1
  132: 					____print_ht $ht 1
  133: 					set $ind = $ind - 1
  134: 					set $i = $ind
  135: 					while $i > 0
  136: 						printf "  "
  137: 						set $i = $i - 1
  138: 					end
  139: 					printf "}"
  140: 				else
  141: 					echo "no properties found"
  142: 				end
  143: 			end
  144: 		end
  145: 		set $type = 0
  146: 	end
  147: 	if $type == 6
  148: 		printf "string(%d): ", $zvalue->value.str.len
  149: 		____print_str $zvalue->value.str.val $zvalue->value.str.len
  150: 	end
  151: 	if $type == 7
  152: 		printf "resource: #%d", $zvalue->value.lval
  153: 	end
  154: 	if $type == 8 
  155: 		printf "constant"
  156: 	end
  157: 	if $type == 9
  158: 		printf "const_array"
  159: 	end
  160: 	if $type > 9
  161: 		printf "unknown type %d", $type
  162: 	end
  163: 	printf "\n"
  164: end
  165: 
  166: define ____printzv
  167: 	____executor_globals
  168: 	set $zvalue = $arg0
  169: 
  170: 	printf "[0x%08x] ", $zvalue
  171: 
  172: 	if $zvalue == $eg.uninitialized_zval_ptr
  173: 		printf "*uninitialized* "
  174: 	end
  175: 
  176: 	set $zcontents = (zval*) $zvalue
  177: 	if $arg1
  178: 		____printzv_contents $zcontents $arg1
  179: 	else
  180: 		____printzv_contents $zcontents 0 
  181: 	end
  182: end
  183: 
  184: define ____print_const_table
  185: 	set $ht = $arg0
  186: 	set $p = $ht->pListHead
  187: 
  188: 	while $p != 0
  189: 		set $const = (zend_constant *) $p->pData
  190: 
  191: 		set $i = $ind
  192: 		while $i > 0
  193: 			printf "  "
  194: 			set $i = $i - 1
  195: 		end
  196: 
  197: 		if $p->nKeyLength > 0
  198: 			____print_str $p->arKey $p->nKeyLength
  199: 			printf " => "
  200: 		else
  201: 			printf "%d => ", $p->h
  202: 		end
  203: 
  204: 		____printzv_contents &$const->value 0
  205: 		set $p = $p->pListNext
  206: 	end
  207: end
  208: 
  209: define print_const_table
  210: 	set $ind = 1
  211: 	printf "[0x%08x] {\n", $arg0
  212: 	____print_const_table $arg0
  213: 	printf "}\n"
  214: end
  215: 
  216: define ____print_ht
  217: 	set $ht = (HashTable*)$arg0
  218: 	set $p = $ht->pListHead
  219: 
  220: 	while $p != 0
  221: 		set $i = $ind
  222: 		while $i > 0
  223: 			printf "  "
  224: 			set $i = $i - 1
  225: 		end
  226: 
  227: 		if $p->nKeyLength > 0
  228: 			____print_str $p->arKey $p->nKeyLength
  229: 			printf " => "
  230: 		else
  231: 			printf "%d => ", $p->h
  232: 		end
  233: 		
  234: 		if $arg1 == 0
  235: 			printf "%p\n", (void*)$p->pData
  236: 		end
  237: 		if $arg1 == 1
  238: 			set $zval = *(zval **)$p->pData
  239: 			____printzv $zval 1
  240: 		end
  241: 		if $arg1 == 2
  242: 			printf "%s\n", (char*)$p->pData
  243: 		end
  244: 
  245: 		set $p = $p->pListNext
  246: 	end
  247: end
  248: 
  249: define print_ht
  250: 	set $ind = 1
  251: 	printf "[0x%08x] {\n", $arg0
  252: 	____print_ht $arg0 1
  253: 	printf "}\n"
  254: end
  255: 
  256: document print_ht
  257: 	dumps elements of HashTable made of zval
  258: end
  259: 
  260: define print_htptr
  261: 	set $ind = 1
  262: 	printf "[0x%08x] {\n", $arg0
  263: 	____print_ht $arg0 0
  264: 	printf "}\n"
  265: end
  266: 
  267: document print_htptr
  268: 	dumps elements of HashTable made of pointers
  269: end
  270: 
  271: define print_htstr
  272: 	set $ind = 1
  273: 	printf "[0x%08x] {\n", $arg0
  274: 	____print_ht $arg0 2
  275: 	printf "}\n"
  276: end
  277: 
  278: document print_htstr
  279: 	dumps elements of HashTable made of strings
  280: end
  281: 
  282: define ____print_ft
  283: 	set $ht = $arg0
  284: 	set $p = $ht->pListHead
  285: 
  286: 	while $p != 0
  287: 		set $func = (zend_function*)$p->pData
  288: 
  289: 		set $i = $ind
  290: 		while $i > 0
  291: 			printf "  "
  292: 			set $i = $i - 1
  293: 		end
  294: 
  295: 		if $p->nKeyLength > 0
  296: 			____print_str $p->arKey $p->nKeyLength
  297: 			printf " => "
  298: 		else
  299: 			printf "%d => ", $p->h
  300: 		end
  301: 
  302: 		printf "\"%s\"\n", $func->common.function_name
  303: 		set $p = $p->pListNext
  304: 	end
  305: end
  306: 
  307: define print_ft
  308: 	set $ind = 1
  309: 	printf "[0x%08x] {\n", $arg0
  310: 	____print_ft $arg0
  311: 	printf "}\n"
  312: end
  313: 
  314: document print_ft
  315: 	dumps a function table (HashTable)
  316: end
  317: 
  318: define ____print_inh_class
  319: 	set $ce = $arg0
  320: 	if $ce->ce_flags & 0x10 || $ce->ce_flags & 0x20
  321: 		printf "abstract "
  322: 	else
  323: 		if $ce->ce_flags & 0x40
  324: 			printf "final "
  325: 		end
  326: 	end
  327: 	printf "class %s", $ce->name
  328: 	if $ce->parent != 0
  329: 		printf " extends %s", $ce->parent->name
  330: 	end
  331: 	if $ce->num_interfaces != 0
  332: 		printf " implements"
  333: 		set $tmp = 0
  334: 		while $tmp < $ce->num_interfaces
  335: 			printf " %s", $ce->interfaces[$tmp]->name
  336: 			set $tmp = $tmp + 1
  337: 			if $tmp < $ce->num_interfaces
  338: 				printf ","
  339: 			end
  340: 		end
  341: 	end
  342: 	set $ce = $ce->parent
  343: end
  344: 
  345: define ____print_inh_iface
  346: 	set $ce = $arg0
  347: 	printf "interface %s", $ce->name
  348: 	if $ce->num_interfaces != 0
  349: 		set $ce = $ce->interfaces[0]
  350: 		printf " extends %s", $ce->name
  351: 	else
  352: 		set $ce = 0
  353: 	end
  354: end
  355: 
  356: define print_inh
  357: 	set $ce = $arg0
  358: 	set $depth = 0
  359: 	while $ce != 0
  360: 		set $tmp = $depth
  361: 		while $tmp != 0
  362: 			printf " "
  363: 			set $tmp = $tmp - 1
  364: 		end
  365: 		set $depth = $depth + 1
  366: 		if $ce->ce_flags & 0x80
  367: 			____print_inh_iface $ce
  368: 		else
  369: 			____print_inh_class $ce
  370: 		end
  371: 		printf " {\n"
  372: 	end
  373: 	while $depth != 0
  374: 		set $tmp = $depth
  375: 		while $tmp != 1
  376: 			printf " "
  377: 			set $tmp = $tmp - 1
  378: 		end
  379: 		printf "}\n"
  380: 		set $depth = $depth - 1
  381: 	end
  382: end
  383: 
  384: define print_pi
  385: 	set $pi = $arg0
  386: 	printf "[0x%08x] {\n", $pi
  387: 	printf "    h     = %lu\n", $pi->h
  388: 	printf "    flags = %d (", $pi->flags
  389: 	if $pi->flags & 0x100
  390: 		printf "ZEND_ACC_PUBLIC"
  391: 	else
  392: 		if $pi->flags & 0x200
  393: 			printf "ZEND_ACC_PROTECTED"
  394: 		else
  395: 			if $pi->flags & 0x400
  396: 				printf "ZEND_ACC_PRIVATE"
  397: 			else
  398: 				if $pi->flags & 0x800
  399: 					printf "ZEND_ACC_CHANGED"
  400: 				end
  401: 			end
  402: 		end
  403: 	end
  404: 	printf ")\n"
  405: 	printf "    name  = "
  406: 	____print_str $pi->name $pi->name_length
  407: 	printf "\n}\n"
  408: end
  409: 
  410: define ____print_str
  411: 	set $tmp = 0
  412: 	set $str = $arg0
  413: 	printf "\""
  414: 	while $tmp < $arg1
  415: 		if $str[$tmp] > 32 && $str[$tmp] < 127
  416: 			printf "%c", $str[$tmp]
  417: 		else
  418: 			printf "\\%o", $str[$tmp]
  419: 		end
  420: 		set $tmp = $tmp + 1
  421: 	end
  422: 	printf "\""
  423: end
  424: 
  425: define printzn
  426: 	____executor_globals
  427: 	set $ind = 0
  428: 	set $znode = $arg0
  429: 	if $znode->op_type == 1
  430: 		set $optype = "IS_CONST"
  431: 	end
  432: 	if $znode->op_type == 2 
  433: 		set $optype = "IS_TMP_VAR"
  434: 	end
  435: 	if $znode->op_type == 4 
  436: 		set $optype = "IS_VAR"
  437: 	end
  438: 	if $znode->op_type == 8
  439: 		set $optype = "IS_UNUSED"
  440: 	end
  441: 
  442: 	printf "[0x%08x] %s", $znode, $optype
  443: 
  444: 	if $znode->op_type == 1
  445: 		printf ": "
  446: 		____printzv &$znode->u.constant 0
  447: 	end
  448: 	if $znode->op_type == 2
  449: 		printf ": "
  450: 		set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var)
  451: 		____printzv ((union _temp_variable *)$tvar)->tmp_var 0
  452: 	end
  453: 	if $znode->op_type == 4
  454: 		printf ": "
  455: 		set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var)
  456: 		____printzv *$tvar->var.ptr_ptr 0
  457: 	end
  458: 	if $znode->op_type == 8
  459: 		printf "\n"
  460: 	end
  461: end
  462: 
  463: document printzn
  464: 	print type and content of znode.
  465: 	usage: printzn &opline->op1 
  466: end
  467: 
  468: define printzops
  469: 	printf "op1 => " 
  470: 	printzn &execute_data->opline.op1
  471: 	printf "op2 => "
  472: 	printzn &execute_data->opline.op2
  473: 	printf "result => "
  474: 	printzn &execute_data->opline.result
  475: end
  476: 
  477: document printzops
  478: 	dump operands of the current opline
  479: end
  480: 
  481: define zbacktrace
  482: 	____executor_globals
  483: 	dump_bt $eg.current_execute_data
  484: end
  485: 
  486: document zbacktrace
  487: 	prints backtrace.
  488: 	This command is almost a short cut for
  489: 	> (gdb) ____executor_globals
  490: 	> (gdb) dump_bt $eg.current_execute_data
  491: end
  492: 
  493: define zmemcheck
  494: 	set $p = alloc_globals.head
  495: 	set $stat = "?"
  496: 	set $total_size = 0
  497: 	if $arg0 != 0
  498: 		set $not_found = 1
  499: 	else
  500: 		set $not_found = 0
  501: 	end
  502: 	printf " block      size      status file:line\n"
  503: 	printf "-------------------------------------------------------------------------------\n"
  504: 	while $p
  505: 		set $aptr = $p + sizeof(struct _zend_mem_header) + sizeof(align_test)
  506: 		if $arg0 == 0 || (void *)$aptr == (void *)$arg0
  507: 			if $p->magic == 0x7312f8dc 
  508: 				set $stat = "OK"
  509: 			end
  510: 			if $p->magic == 0x99954317
  511: 				set $stat = "FREED"
  512: 			end
  513: 			if $p->magic == 0xfb8277dc
  514: 				set $stat = "CACHED"
  515: 			end
  516: 			set $filename = strrchr($p->filename, '/')
  517: 			if !$filename
  518: 				set $filename = $p->filename
  519: 			else
  520: 				set $filename = $filename + 1
  521: 			end
  522: 			printf " 0x%08x ", $aptr
  523: 			if $p->size == sizeof(struct _zval_struct) && ((struct _zval_struct *)$aptr)->type >= 0 && ((struct _zval_struct *)$aptr)->type < 10
  524: 				printf "ZVAL?(%-2d) ", $p->size
  525: 			else
  526: 				printf "%-9d ", $p->size
  527: 			end
  528: 			set $total_size = $total_size + $p->size
  529: 			printf "%-06s %s:%d", $stat, $filename, $p->lineno
  530: 			if $p->orig_filename
  531: 				set $orig_filename = strrchr($p->orig_filename, '/')
  532: 				if !$orig_filename
  533: 					set $orig_filename = $p->orig_filename
  534: 				else
  535: 					set $orig_filename = $orig_filename + 1
  536: 				end
  537: 				printf " <= %s:%d\n", $orig_filename, $p->orig_lineno
  538: 			else
  539: 				printf "\n"
  540: 			end
  541: 			if $arg0 != 0
  542: 				set $p = 0
  543: 				set $not_found = 0
  544: 			else
  545: 				set $p = $p->pNext
  546: 			end
  547: 		else
  548: 			set $p = $p->pNext
  549: 		end
  550: 	end
  551: 	if $not_found
  552: 		printf "no such block that begins at 0x%08x.\n", $aptr 
  553: 	end
  554: 	if $arg0 == 0
  555: 		printf "-------------------------------------------------------------------------------\n"
  556: 		printf "     total: %d bytes\n", $total_size
  557: 	end
  558: end
  559: 
  560: document zmemcheck
  561: 	show status of a memory block.
  562: 	usage: zmemcheck [ptr].
  563: 	if ptr is 0, all blocks will be listed.
  564: end

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>