From: Reeze Xia Date: Sun, 30 Sep 2012 19:10:15 +0000 (+0800) Subject: Eliminate process running requirement of dump_bt in .gdbinit X-Git-Tag: php-5.4.8RC1~6^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dedbba4e5bab1e3520c9cc43b094a3a057b0316f;p=php Eliminate process running requirement of dump_bt in .gdbinit Most of the time scope are avaible, but if not, it will be hard to get them, since we can't call function if no proccess running. try to get class name if we can. --- diff --git a/.gdbinit b/.gdbinit index 8cdfaa6093..be2f007d27 100644 --- a/.gdbinit +++ b/.gdbinit @@ -47,23 +47,34 @@ define dump_bt if $fst.function.common.scope printf "%s->", $fst.function.common.scope->name else - ____executor_globals - set $class_name_ptr = (char **)malloc(sizeof(char **)) - set $class_name_len = (int *)malloc(sizeof(int *)) - - if basic_functions_module.zts - set $dup = zend_get_object_classname($t->object, $class_name_ptr, $class_name_len, $tsrm_ls) - else - set $dup = zend_get_object_classname($t->object, $class_name_ptr, $class_name_len) + if !$eg && !basic_functions_module.zts + ____executor_globals end - printf "%s->", *$class_name_ptr + set $known_class = 0 + if $eg + set $handle = $t->object.value.obj.handle + set $handlers = $t->object.value.obj.handlers + set $zobj = (zend_object *)$eg.objects_store.object_buckets[$handle].bucket.obj.object + + if $handlers->get_class_entry == &zend_std_object_get_class + set $known_class = 1 + + if $handlers.get_class_name + if $handlers.get_class_name != &zend_std_object_get_class_name + set $known_class = 0 + end + end + + if $known_class + printf "%s->", $zobj->ce.name + end + end + end - if !$dup - call _efree(*$class_name_ptr, "[GDB]", 0, "", 0) + if !$known_class + printf "Unknow->" end - call (void) free($class_name_ptr) - call (void) free($class_name_len) end else if $fst.function.common.scope