The data-debug utility is a part of CEDET, a CollectionOfEmacsDevelopmentEnvironmentTools.
This utility was written to help browse through complicated data structures in CEDET, such as EIEIO objects, Semantic Tags, Database search results, and many others.
The data-debug utility can be extracted from CEDET CVS data-debug.el though the default configuration uses functions found in the rest of CEDET. You can reconfigure
data-debug-thing-alist to exclude such items if desired.
Apparently Emacs 23 comes with CEDET, so you can just
You can use data-debug as the default output of eval by binding it to
M-: like this:
(global-set-key "\M-:" 'data-debug-eval-expression)
If you write functions with complex output that need debugging, you can make them interactive with data-debug-show-stuff. For example:
(defun my-complex-output-fcn () "Calculate something complicated at point, and return it." (interactive) ;; function not normally interactive (let ((stuff (do-stuff))) (when (interactive-p) (data-debug-show-stuff stuff "myStuff")) stuff))
When using the eval binding above, you would get output like this:
M-: (list 1 2 3 4)
?#<list o' stuff: 4 entries> > 1 > 2 > 3 > 4
When using a tool like CEDET/Semantic, you might get some output like this:
?data-debug-eval-expression | Name: "data-debug-eval-expression" | Class: 'function | Position: 33553 -> 34769 in data-debug.el <live tag> | Position Data: #<overlay from 33553 to 34769 in data-debug.el> | Attributes: # :user-visible-flag : 't # :arguments : #<list o' stuff: 1 entries> | Properties: # unlink-hook : #<list o' stuff: 1 entries> # link-hook : #<list o' stuff: 1 entries> # unlink-copy-hook : #<list o' stuff: 1 entries> # secondary-overlays : #<overlay list: 1 entries>
In the data-debug buffer, using
SPC will expand or contract a line so you can move navigate down through complex structures without worrying about recursion, or looking at parts of the structure you don’t care about.