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