Skip to content
  • Erik Walthinsen's avatar
    Changes made to the DEBUG system. New header file gstdebug.h holds the stuff... · 29d567ba
    Erik Walthinsen authored
    Changes made to the DEBUG system.  New header file gstdebug.h holds the stuff to keep it out of gst.h's hair.  DEBUG ...
    
    Original commit message from CVS:
    Changes made to the DEBUG system.  New header file gstdebug.h holds the
    stuff to keep it out of gst.h's hair.  DEBUG prints out the process id,
    cothread id, source filename and line number.  Two new macros DEBUG_ENTER
    and DEBUG_LEAVE are used to show the entry and exit of a given function.
    This eventually might be used to construct call trace graphs, even taking
    cothreads into account.  This would be quite useful in visualizing the
    scheduling mechanism.
    
    Minor changes to various debug messages.
    
    Also sitting in gstdebug.h is a prototypical DEBUG_ENTER that's capable of
    performing DEBUG_LEAVE automatically.  It does this by utilizing a
    little-known GCC extension that allows one to call a function with the
    same parameters as the current function.  The macro uses this to basically
    call itself.  A boolean is used to ensure that when it calls itself it
    actually runs the body of the function.  In the meantime it prints stuff
    out before and after the real function, as well as constructing a
    debugging string.  This can be used eventually to provide call-wide data
    on the DEBUG lines, instead of having to replicate data on each call to
    DEBUG.  More research is needed into how this would most cleanly be fit
    into some other chunk of code, like GStreamer (I think of this DEBUG trick
    as a separate project, sorta).
    
    Unfortunately, the aforementioned DEBUG trick interacts quite poorly with
    cothreads.  Almost any time it's used in a function that has anything
    remotely to do with a cothread context (as in, it runs in one), a segfault
    results from the __builtin_apply call, which is the heart of the whole
    thing.  If someone who really knows assembly could analyze the resulting
    code to see what's really going on, we might find a way to fix either the
    macro or the cothreads (I'm thinking that there's something we missed in
    constructing the cothreads themselves) so this works in all cases.
    
    In the meantime, please insert both DEBUG_ENTER and DEBUG_LEAVE in your
    functions.  Be sure to put DEBUG_ENTER after your variable declarations
    and before any functional code, not to put the function name in any DEBUG
    strings (it's already there, trust me), and put a DEBUG_LEAVE if you care
    enough.
    
    Changes are going to happen in the way DEBUGs and other printouts occur,
    so stay tuned.
    29d567ba