[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

debugger extensions



One of the things that I find annoying when using pcl is that the debugger
support is quite bad.  I understand that pcl is not a "supported" product
of Franz, but it would be nice if there was some way that I could make the
debugger a little bit more friendly/customizable.  This would also be a
benifit for me writing my own packages.  I have two specific suggestions;

 1. If I hide a function (debugger::hide 'xyz:foo), then all internal
    functions of xyz:foo should be hidden as well, similarly for compiler
    generated functions like "RANDOM-FORMS".
 2. Provide a hook so that I can tell you if a stack frame should be
    displayed.  I don't have a good idea what this would look like, perhaps
    for now just boolean (DEBUGGER:SHOW-STACK-FRAME-P frame) with
    documented access to the function and args.  I'm mostly interested in
    having a way to experiment with this, so it is not necessary that it be
    an exported/supported interface (i.e. it can change in the future
    without causing me undo pain).

Given item 1, the following zoom... 

Evaluation stack:

 ->(ERROR "No matching method for the generic-function ~S,~@
          when called with arguments ~S." #<Function BAR @ #x90ce19> ...)
   (PCL::|(METHOD NO-APPLICABLE-METHOD (T))| #<Function BAR @ #x90ce19> 1)
   (#:|..$RANDOM-FORMS$.a749b7b8.a749b7b9| 1)
   ((LAMBDA (X) (DECLARE #) ...) #<APPLE 44503001>)
   (#:|..$RANDOM-FORMS$.a749b7b8.a749b7b9| #<APPLE 44503001>)
   (PCL::NOTICE-METHODS-CHANGE-2 #<Function FOO @ #x90c541> (#<APPLE 44503001>))
   (#:|.NOTICE-METHODS-CHANGE.a749b751| #<APPLE 44503001>)
   (EVAL (FOO (PCL:MAKE-INSTANCE #)))
   (EXCL::START-REBORN-LISP)

could be reduced to:

Evaluation stack:

 ->(ERROR "No matching method for the generic-function ~S,~@
          when called with arguments ~S." #<Function BAR @ #x90ce19> ...)
   (PCL::|(METHOD NO-APPLICABLE-METHOD (T))| #<Function BAR @ #x90ce19> 1)
   ((LAMBDA (X) (DECLARE #) ...) #<APPLE 44503001>)
   (EVAL (FOO (PCL:MAKE-INSTANCE #)))
   (EXCL::START-REBORN-LISP)

Just by hidding notice-methods-change{,-2} and random-forms, two of PCL's 
favorites.