]> granicus.if.org Git - php/commitdiff
Eliminate process running requirement of dump_bt in .gdbinit
authorReeze Xia <reeze@php.net>
Sun, 30 Sep 2012 19:10:15 +0000 (03:10 +0800)
committerReeze Xia <reeze@php.net>
Sun, 30 Sep 2012 19:10:15 +0000 (03:10 +0800)
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.

.gdbinit

index 8cdfaa6093f221b9661a3077b7dee64b42d25dcf..be2f007d2707c12c313b5c8933bcf6bcaffca241 100644 (file)
--- 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