File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / .gdbinit
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:34:34 2012 UTC (12 years, 1 month ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_17p0, HEAD
php 5.4.3+patches

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

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