Annotation of embedaddon/php/.gdbinit, revision 1.1.1.1
1.1 misho 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>