Permalink
Browse files

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.
  • Loading branch information...
1 parent 752280d commit dedbba4e5bab1e3520c9cc43b094a3a057b0316f @reeze reeze committed Sep 30, 2012
Showing with 24 additions and 13 deletions.
  1. +24 −13 .gdbinit
View
@@ -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

0 comments on commit dedbba4

Please sign in to comment.