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>